【发布时间】:2015-03-28 09:50:09
【问题描述】:
我试试这个模式
(?:(\d+)\/|)reports\/(\d+)-([\w-]+).html
使用这个字符串(preg_match 带有修饰符“Axu”)
reports/683868-derger-gergewrger.html
我期待这个匹配的结果 (https://regex101.com/r/kX6yZ5/1):
[1] => 683868
[2] => derger-gergewrger
但我明白了:
[1] =>
[2] => 683868
[3] => derger-gergewrger
为什么?空值(1)在哪里,因为模式不应该捕获“?:”
我有两种情况:
- “报告/683868-derger-gergewrger.html”
- “757/reports/683868-derger-gergewrger.html”
在第一种情况下,我需要两次捕获,但在第二种情况下,我需要三个捕获。
【问题讨论】:
-
如果捕获的数字在字符串中不存在但它的存在是可选的,则相应的捕获组将包含一个空字符串。这是设计使然。
-
好的,我明白了,谢谢。