PCRE正则表达式匹配/ x ...,但不匹配/ y / x

时间:2018-11-28 15:24:39

标签: regex pcre

在配置重定向时,通常会遇到多个包含某些相同路径字符串的页面。我们已经多次遇到此实例,需要重定向:

https://example.com/x...

但不是:

https://example.com/y/x...

要匹配/ x ...,我们使用PCRE正则表达式:

/x.*

我们一直在努力使排除对象正确匹配;由于我们的regex有点薄弱,我们提前道歉,这是我们的伪代码:

Match all /x... except /y/x...

这就是我们认为的样子:

^\/(?!y\/).x.*

在我们的脑海中写着:

Any query starting with /x..., except starting with /y/x...

预先感谢您,请随时提出更好的格式建议,我们不是堆栈溢出专家。

2 个答案:

答案 0 :(得分:1)

您的正则表达式从字符串的开头匹配一个正斜杠,然后使用否定的超前查找来检查后面不是y/的内容。如果是这样,则匹配任何字符,后跟x和0+字符。例如//x///

不考虑匹配url部分,一种方法可能是使用否定的lookahead (?!检查右侧的内容是否不包含/y/x然后匹配任何字符:

^(?!.*/y/x).+

Regex demo

答案 1 :(得分:1)

您可以在断言后面使用否定的断言:

~(?<!/y)/x~

RegEx Demo

(?<!/y)是一个否定的隐式断言,如果在匹配/y之前出现/x,则匹配失败。