2011-01-21 5 views
1

Я пытаюсь сопоставить два типа строк, используя функцию preg_match в PHP, которая может быть следующей.Регулярные регулярные выражения

  • '_mything_to_newthing'
  • '_onething'
  • '_mything_to_newthing_and_some_stuff'

В третьем выше, я только хочу "mything" и "newthing", поэтому все, что приходит после того, как Третья часть - это просто дополнительный текст, который пользователь может добавить. В идеале из регулярного выражения приходилось бы в случаях выше;

  • 'mything', '' newthing
  • 'onething'
  • 'mything', '' newthing

Шаблоны должны соответствовать-Za-z0-9, если это возможно: -)

Мое регулярное выражение ужасно, поэтому любая помощь будет оценена!

Спасибо в продвижении.

ответ

1

Предполагая, что вы говорите о _ deliminated текст:

$regex = '/^_([a-zA-Z0-9]+)(|_to_([a-zA-Z0-9]+).*)$/'; 

$string = '_mything_to_newthing_and_some_stuff'; 
preg_match($regex, $string, $match); 
$match = array(
    0 => '_mything_to_newthing_and_some_stuff', 
    1 => 'mything', 
    2 => '_to_newthing_and_some_stuff', 
    3 => 'newthing', 
); 

Как далеко, как и все дальше, пожалуйста, предоставить более подробную информацию и лучше образец текста/вывода

Edit: Вы всегда можете просто использовать explode:

$parts = explode('_', $string); 
$parts = array(
    0 => '', 
    1 => 'mything', 
    2 => 'to', 
    3 => 'newthing', 
    4 => 'and', 
    5 => 'some', 
    6 => 'stuff', 
); 

пока формат соответствует, он должен работать мы ll ...

+0

Спасибо! Знаешь .. Я никогда не думал об этом как о '' 'разделительном тексте! Я мог бы просто использовать 'explode()';) – tarnfeld