我需要让以下正则表达式工作但有问题。是的,它正在解析 HTML。不,没有更好的选择。
这是正则表达式:
test(.*)\/[^s].*(=|\/|Z)
我正在使用“U”修饰符(所以它是不贪婪的),“\”是我的转义符号。
插入此模式:
test.com/sch/anythingwhateverZhello
结果是一场比赛,当我认为它不应该的时候。捕获是“.com/sch”和“Z”,尽管我(认为)我特别告诉它应该 A)只捕获第一个“/”,所以它应该是“.com”,并且 B)如果“/”后的第一个字母是“s”,则不匹配。有趣的是——我的问题的可能根源——是当我删除 [^s] 时,捕获现在可以正常工作。有了它,星号会吞噬第二个“/”,这是没有意义的。我尝试在星号后加一个问号,作为对正则表达式的双重暗示,它不应该是贪婪的,但这没有任何区别。
好的,所以不是一个否定的字符类(我真的不想只排除“s”;我真的想特别排除“sch”),接下来我尝试了一个否定的前瞻:
test(.*)\/(?!sch).*(=|\/|Z)
同样的问题!匹配,第一个捕获是“.com/sch”。
知道我的错误是什么吗?(我一直在http://www.rexv.org/使用 RexV2 正则表达式验证器,所以我想到该引擎中可能存在错误,但我可以在我的实时环境中复制此问题)。