预期正则表达式匹配但不匹配

Regex match expected but not matching

给定这串 ; 个分隔值


a;; z
toy;d;hh 
toy
;b;;jj
z;
d;23
d;23td
;;io;
b y;b;12
z
a;b;bb;;;34
z

和这个正则表达式

^(?!([^\r\n;]*);(?:(b|d))(?:;|$)).*\R

我正在寻找第 2 行的完整行。列不是 bd,并且删除了匹配行,像这样

toy;d;hh 
;b;;jj
b y;b;12
a;b;bb;;;34

请参阅demo

第 13 行的第二列不是 bd。尽管如此,它还是不匹配,并显示在替换框中。

第 11 行具有相同的字符串并且确实匹配。

感谢任何帮助

那是因为您要查找的新行序列 \R 在最后一行的末尾不存在。

使用以下方法可以解决问题:

^(?!([^\r\n;]*);(?:(b|d))(?:;|$)).*\R*

^(?!([^\r\n;]*);(?:(b|d))(?:;|$)).*(\R|$)

^(?!([^\r\n;]*);(?:(b|d))(?:;|$)).*\R{0,1}

改变了什么?

\R* 将匹配零个或多个换行序列

\R{0,1} 将匹配零或一个新的行序列

(\R|$) 将匹配新的行序列或行尾