Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式:字符组上的负匹配?_Regex - Fatal编程技术网

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).*$"