【发布时间】:2023-04-04 00:59:01
【问题描述】:
我正在测试一些正则表达式来处理子模式,这样我就可以通过 PHP 为每个 uri 段应用定义的规则。其中一些部分是可选的,所以我尝试了这个:
preg_match('#^/(?P<controller>[\w-]+)(?:/(?P<[\w-]+)(?:/(?P<id>[\d]+)))/?$#uD', '/blog/post', $matches);
这个正则表达式匹配/blog/post/1,但不匹配blog/post,因为第二个和第三个参数都是可选的。有什么线索吗?
【问题讨论】:
-
您确定第二组和第三组是可选的吗?我看到你正在使用look-aehead
(?:),但要使它们成为可选需要()? -
@FrankvanPuffelen
?:不是前瞻组,而是非捕获组。 -
@m.buettner:谢谢。我总是混淆各种构造名称。 ;-) 不过,它们都不是可选组 (
()?),所以我说对了。 -
@AndyLester 这不是 XML
-
@AndyLester URI XML 怎么样?