Regex 正则表达式:字符组上的负匹配?
我想创建一个正则表达式,它将匹配所有以Regex 正则表达式:字符组上的负匹配?,regex,Regex,我想创建一个正则表达式,它将匹配所有以020052i0开头的字符串,然后匹配下两个字符而不是BB的字符串 所以我想匹配: 0205052I0AAAAAA 0205052I0ACAAAA 0205052I0BCABAA 但不匹配: 0205052I0BBAA 如何使用PCRE正则表达式执行此操作 我一直在尝试$020052i0^(BB),但它不起作用 您可以使用负面展望: "0205052I0(?!BB).*" 见演示 还请注意,您将锚点放置在错误的位置。如果你想使用anchor,你
020052i0
开头的字符串,然后匹配下两个字符而不是BB的字符串
所以我想匹配:
0205052I0AAAAAA
0205052I0ACAAAA
0205052I0BCABAA
但不匹配:
0205052I0BBAA
如何使用PCRE正则表达式执行此操作
我一直在尝试
$020052i0^(BB)
,但它不起作用 您可以使用负面展望:
"0205052I0(?!BB).*"
见演示
还请注意,您将锚点放置在错误的位置。如果你想使用anchor,你可以使用下面的正则表达式
:
以防万一:
^
仅用于字符类中的而不是。例如:[^B]
。在您的情况下,您需要类似020052i0(B[^B]|[^B]B[124;[^ B][^B])
对于所描述的效果 在行动中看到它: 但这相当麻烦。@Kasra建议的消极前瞻是更好的选择 仍然-如果您确实想要捕获匹配的表达式,则需要添加括号:
(020052I0(?:B[^B]|[^B]B[^B][^B])。
或者-同样-更好(在可读性/可扩展性/可维护性方面)
(020052I0(?!BB)。*)
但是,如果您想保留不包含BB的字符串,您最好匹配这些字符串并将其替换为零:(020052i0(?=BB)。*)
您的示例字符串有前导空格,我没有在图片中添加锚…然而,谈到锚定:$是用于线尾——但不用于断线,因为您的尝试可能会被阅读 如果需要调整/进一步详细信息,请发表意见
"^0205052I0(?!BB).*$"