Regex PCRE正则表达式匹配/x。。。但不是/y/x

Regex PCRE正则表达式匹配/x。。。但不是/y/x,regex,pcre,Regex,Pcre,配置重定向时,通常会遇到多个包含一些相同路径字符串的页面。我们多次遇到此实例,需要重定向: https://example.com/x... 但不是: https://example.com/y/x... 要匹配/x。。。我们使用PCRE正则表达式: /x.* 我们一直在努力使排除正确匹配;我们提前道歉,因为我们的正则表达式有点弱,下面是我们的伪代码: Match all /x... except /y/x... 下面是我们认为的情况: ^\/(?!y\/).x.* 在我们的心目中:

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

https://example.com/x...
但不是:

https://example.com/y/x...
要匹配/x。。。我们使用PCRE正则表达式:

/x.*
我们一直在努力使排除正确匹配;我们提前道歉,因为我们的正则表达式有点弱,下面是我们的伪代码:

Match all /x... except /y/x...
下面是我们认为的情况:

^\/(?!y\/).x.*
在我们的心目中:

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

提前感谢您,请随意建议更好的格式,我们不支持堆栈溢出。

您的正则表达式从字符串开始匹配正斜杠,然后使用负前瞻检查以下内容是否为
y/
。如果这是真的,则匹配后跟x和0+字符的任何字符。例如,它将匹配
//x//

在不考虑匹配url部分的情况下,一种方法是使用负数
(?!
检查右侧的内容是否不包含
/y/x
,然后匹配任何字符:

^(?。*/y/x)。+


您可以使用否定查找断言:

~(?<!/y)/x~
~(?


(?是一个反向查找资产,如果在匹配
/x

之前出现
/y
,则匹配将失败。谢谢,这是一个有用的起点。您正好得到了我们缺少的一半,即exclude/y/x…但这也将匹配所有其他查询,如/z/。是否打算在regex之前追加以匹配/x/?S像^(?。*/y/x.+x.*你真是太棒了,这很有效:^(?。。*/y/x.*/x.*你能让我看看伪代码中读到的东西吗,这样以后用户就可以了解他们可能误解了什么?我认为所有查询都是从排除/y/x的所有实例开始的,除了/x…我认为你需要:^(?。*/y/x)/x、 +仅当路径中有/x时才匹配。@beta208将工作
^(?。*/y/x).*/x.*
如果字符串中应该有
/x
。它将匹配到最后出现的
/x
,并匹配其后的任何字符0+次。谢谢你,这是有意义的。我确实看到这也匹配并且更短。我想这是理想的解决方案?是的,你的需求需要一个查找,而且这一个是mor正如您在我提供的regex演示链接中所看到的那样,效率比
^(?。*/y/x.*/x.*/x
高。在我们的系统中,这一个与/午餐/不匹配,但仅与/午餐匹配。是:~(?对不起,我不明白您的意思。您的系统上实际的regex是什么?