我需要让以下正则表达式工作但有问题。是的,它正在解析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正则表达式验证器,因此我发现该引擎中可能存在错误,但我可以在我的实时环境中复制此问题。)
答案 0 :(得分:0)
test(.*)
这是你的问题。也许它应该是测试([^ /] *)?
就是这样,它匹配test.com/sch
,因为.
表示任何字符,然后是/
,然后s
中没有anythingwhateverZhello
,所以它继续前进。