1

我需要让以下正则表达式工作但有问题。是的,它正在解析 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 正则表达式验证器,所以我想到该引擎中可能存在错误,但我可以在我的实时环境中复制此问题)。

4

1 回答 1

0

test(.*)那是你的问题。也许应该是 test([^/]*)?

它的方式是 match test.com/sch,因为.表示任何字符,然后/没有sin anythingwhateverZhello,所以它继续。

于 2013-02-28T20:21:06.147 回答