PHP условное регулярное выражение - PullRequest
0 голосов
/ 09 мая 2018

Я не понимаю условное регулярное выражение.

Использование preg_match

Я пытаюсь получить

  • всегда 4 совпадения
  • посередине есть дополнительная черта
  • в конце есть необязательный int

Пример

aaa-bbb-ccc-1

"aaa" должно совпадать [1]

"bbb" должно совпадать [2]

"ccc" должно совпадать [3]

«1» должно совпадать [4]

Но в bbb может быть дополнительная черта. Также последний не является обязательным.

Ре.

aaa-bbb-bbb-ccc

"aaa" должно совпадать [1]

"bbb-bbb" должно совпадать [2]

"ccc" должно совпадать [3]

"" должны совпадать [4]

Что я получил до сих пор:

^(\w+)-(\w+)-(\w+)-(\d)$

Работает просто с 4 группами.

1-3 ожидается в виде буквы, цифры, подчеркивания.

4 ожидается как цифра.

Но я не знаю, как использовать условия (http://php.net/manual/de/regexp.reference.conditional.php).

Онлайн тест: https://regex101.com/r/Ln3f3I/2

Спасибо за помощь / Cottton

1 Ответ

0 голосов
/ 09 мая 2018

Вы можете использовать это регулярное выражение с необязательной последней группой и не жадным квантификатором во 2-й группе:

^(\w+)-([\w-]+?)-(\w+)(?:-(\d+))?+$

Обновленная демоверсия RegEx

Regex Подробности:

  • ^(\w+)-: совпадение с 1+ символами слова в начале 1-й группы, за которыми следует -
  • ([\w-]+?)-: сопоставить 1+ слово или дефис во 2-й группе (ленивый) с последующим -
  • (\w+): совпадение 1+ символов слова в 3-й группе
  • (?:-(\d+))?+$: необязательная группа с дефисом и цифрами в конце.
...