繁体   English   中英

正则表达式否定字符类和点星号

[英]Regex negative character class and dot-asterisk

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

test(.*) ,这是您的问题。 也许应该是test([^ /] *)?

它的方式与test.com/sch匹配,因为. 表示任何字符,然后/ ,然后在anythingwhateverZhello都没有s ,因此它一直在继续。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM