PCRE 正则表达式前瞻
PCRE regex lookahead
我无法让 PCRE 前瞻正常工作,我们将不胜感激,我发现很难解释,但我们开始吧,以这种模式为例:
/^\/page(\/?[a-z0-9\.\_\-]+)*\/?$/i
这匹配:
- /页
- /页/
- /page/abc/def/
很好,但这也匹配“/pageabcd”,这应该是错误的。所以基本上对于 URI 尾随“/”应该是可选的,除非有一些其他的 [a-z0-9\.\-\_]*
我已经无奈地尝试了^\/page(?=(\/)(\/?[a-z0-9\.\_\-]+)*|(\/)?)$
,虽然我知道我做错了什么
您可以通过删除 /
之后的 ?
量词来强制出现字母、数字、.
、_
或 -
量化捕获组。此外,您可以使用 \w
而不是 [a-zA-Z0-9_]
来稍微缩短模式。 non-capturing 组也更合适,因为您不需要捕获 repeated capturing group 的值(将 (
替换为 (?:
)。
使用
/^\/page(?:\/[\w.-]+)*\/?$/i
^
参见regex demo。
我无法让 PCRE 前瞻正常工作,我们将不胜感激,我发现很难解释,但我们开始吧,以这种模式为例:
/^\/page(\/?[a-z0-9\.\_\-]+)*\/?$/i
这匹配:
- /页
- /页/
- /page/abc/def/
很好,但这也匹配“/pageabcd”,这应该是错误的。所以基本上对于 URI 尾随“/”应该是可选的,除非有一些其他的 [a-z0-9\.\-\_]*
我已经无奈地尝试了^\/page(?=(\/)(\/?[a-z0-9\.\_\-]+)*|(\/)?)$
,虽然我知道我做错了什么
您可以通过删除 /
之后的 ?
量词来强制出现字母、数字、.
、_
或 -
量化捕获组。此外,您可以使用 \w
而不是 [a-zA-Z0-9_]
来稍微缩短模式。 non-capturing 组也更合适,因为您不需要捕获 repeated capturing group 的值(将 (
替换为 (?:
)。
使用
/^\/page(?:\/[\w.-]+)*\/?$/i
^
参见regex demo。