PCRE 正则表达式前瞻

PCRE regex lookahead

我无法让 PCRE 前瞻正常工作,我们将不胜感激,我发现很难解释,但我们开始吧,以这种模式为例:

/^\/page(\/?[a-z0-9\.\_\-]+)*\/?$/i

这匹配:

很好,但这也匹配“/pageabcd”,这应该是错误的。所以基本上对于 URI 尾随“/”应该是可选的,除非有一些其他的 [a-z0-9\.\-\_]*

我已经无奈地尝试了^\/page(?=(\/)(\/?[a-z0-9\.\_\-]+)*|(\/)?)$,虽然我知道我做错了什么

您可以通过删除 / 之后的 ? 量词来强制出现字母、数字、._-量化捕获组。此外,您可以使用 \w 而不是 [a-zA-Z0-9_] 来稍微缩短模式。 non-capturing 组也更合适,因为您不需要捕获 repeated capturing group 的值(将 ( 替换为 (?:)。

使用

/^\/page(?:\/[\w.-]+)*\/?$/i
            ^ 

参见regex demo