【发布时间】:2015-09-09 14:45:05
【问题描述】:
我正在尝试在另一个特定字符前面添加一个字符,除非它前面已经有我要注入的字符。这很好用(在任何 Z 之前插入一个 n,除非它之前已经有一个 n):
s/([^n])Z/$1nZ/g;
除了前面没有任何内容的单词边界。所以要解决我尝试过的问题:
s/([\b^n])Z/$1nZ/g; # does not work
s/(\b|[^n])Z/$1nZ/g; # does work
为什么#1 不起作用?看起来合法吗?
【问题讨论】:
-
如果
^不在字符类的开头,则表示文字字符^不否定这个字符类。 -
在同一个字符类中不能有正负匹配,负类以^开头所以[\b^n]匹配任何单词边界,^或n
-
请注意
[\b^n]是一个包含三个或四个元素的字符类(^和n很简单;\b可能是'退格'或反斜杠和b);哪个都没有关系,因为你想要的也不是。许多元字符在字符类中失去了它们的特殊含义。
标签: regex perl regex-negation character-class