Необязательные совпадения регулярных выражений

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

  • '_mything_to_newthing'
  • '_одна вещь'
  • '_mything_to_newthing_and_some_stuff'

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

  • 'мое дело', 'новинка'
  • 'одна вещь'
  • 'мое дело', 'новинка'

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

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

Заранее спасибо.


person tarnfeld    schedule 21.01.2011    source источник


Ответы (1)


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

$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',
);

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

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

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

Пока формат согласован, он должен работать хорошо...

person ircmaxell    schedule 21.01.2011
comment
Спасибо! Знаете... Я никогда не думал об этом как о тексте с разделителями _! Я мог бы просто использовать explode() ;) - person tarnfeld; 22.01.2011