我无法让PCRE前瞻正常工作,感谢帮助,我发现很难解释,但在这里我们去,以此模式为例:
/^\/page(\/?[a-z0-9\.\_\-]+)*\/?$/i
匹配:
哪个好,但这也匹配' / page abcd '这应该是错的。所以基本上对于URI尾随" /"应该是可选的,除非有其他[a-z0-9\.\-\_]*
当我知道自己做错了时,我无助地试了^\/page(?=(\/)(\/?[a-z0-9\.\_\-]+)*|(\/)?)$
答案 0 :(得分:1)
您可以通过在量化捕获中.
之后删除_
量词来强制执行字母,数字,-
,?
或/
的存在组。此外,您可以使用\w
代替[a-zA-Z0-9_]
来缩短模式。非捕获组也更合适,因为您不需要捕获repeated capturing group的值(将(
替换为(?:
)。
使用
/^\/page(?:\/[\w.-]+)*\/?$/i
^
请参阅regex demo。