PHP 条件正则表达式

PHP conditional regex

我不明白条件正则表达式。

使用preg_match

我尝试得到

示例:

aaa-bbb-ccc-1

"aaa" 应该匹配[1]

"bbb" 应该匹配[2]

"ccc" 应该匹配 [3]

“1”应该匹配[4]

但是 bbb 中可以有一个可选的破折号。最后一个是可选的。

Fe.

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

感谢帮助 /棉花

您可以将此正则表达式与可选的最后一组和第二组中的非贪婪量词一起使用:

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

Updated RegEx Demo

正则表达式详细信息:

  • ^(\w+)-:在第 1 组的开头匹配 1+ 个单词字符,然后是 -
  • ([\w-]+?)-:匹配第 2 组(惰性)中的 1+ 个单词或连字符,后跟 -
  • (\w+): 匹配第3组中的1+个单词字符
  • (?:-(\d+))?+$: 可选组,末尾有连字符和数字。