使用以下正则表达式,结果中始终包含最后一个字符。我不知道为什么。从我所知道的一切,它应该忽略整个字符串,包括S.
正则表达式:(?!XQS|QS)\w+
或(?!X?QS)\w+
测试数据:
XQSedbc6ba985837c6fc990642cd3987769
QS3e05a46c5e0728bc72b40a5d5402d933
XQS10fc2d802c082c75bd069ebfad0f31a4
QS983b36e91e2ba2089760a4d41089a0b3
ea9b8c6ca9edd686f3a25c319d3f5507
匹配以下字符串:
Sedbc6ba985837c6fc990642cd3987769
S3e05a46c5e0728bc72b40a5d5402d933
S10fc2d802c082c75bd069ebfad0f31a4
S983b36e91e2ba2089760a4d41089a0b3
ea9b8c6ca9edd686f3a25c319d3f5507
但是我想要以下字符串:
edbc6ba985837c6fc990642cd3987769
3e05a46c5e0728bc72b40a5d5402d933
10fc2d802c082c75bd069ebfad0f31a4
983b36e91e2ba2089760a4d41089a0b3
ea9b8c6ca9edd686f3a25c319d3f5507
这需要与第0组的整个正则表达式相匹配。它使用Java构建的不可知解析器。我试图避免代码更改。
答案 0 :(得分:2)
如果您的工具使用Java风格,您可以使用:
(?<=X?QS).+$|^(?:(?!X?QS).)+$
故障:
(?<=X?QS)
断言前面的字符是XQS还是QS(您不需要X?
?).+$
匹配输入字符串/行的结尾|
或^
匹配输入字符串/行的开头(?:
开始非捕获组
(?!X?QS).
如果下一个字符不是X,请取一个字符?QS )+
CG结束,尽可能多地重复$
输入字符串/行的结尾答案 1 :(得分:0)
Lookahead在这种情况下不会工作,因为它只是增加位置
直到断言通过。
看看背后是你需要什么,因为它有更多的力量。
(?m)(?:\w(?<!^XQS)(?<!^QS))+$
https://regex101.com/r/xbTHvF/1
但是,你可以选择最快的方式,那就是消费 断言中的内容,并捕捉其后的内容。
^(?:X?QS)?(\w+)$