【问题标题】:PHP conditional regexPHP 条件正则表达式
【发布时间】:2018-05-09 16:37:58
【问题描述】:

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

使用 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

感谢您的帮助 /棉花

【问题讨论】:

    标签: php regex conditional


    【解决方案1】:

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

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

    Updated RegEx Demo

    正则表达式详细信息:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多