Regex 不确定为什么这个Perl正则表达式不起作用(字符类)
我试图在另一个特定的字符前面添加一个字符,除非前面已经有我试图注入的字符。这很好(在任何Z之前插入一个n,除非它前面已经有一个n): 除了单词边界之外,前面什么都没有。为了解决这个问题,我尝试:Regex 不确定为什么这个Perl正则表达式不起作用(字符类),regex,perl,regex-negation,character-class,Regex,Perl,Regex Negation,Character Class,我试图在另一个特定的字符前面添加一个字符,除非前面已经有我试图注入的字符。这很好(在任何Z之前插入一个n,除非它前面已经有一个n): 除了单词边界之外,前面什么都没有。为了解决这个问题,我尝试: s/([\b^n])Z/$1nZ/g; # does not work s/(\b|[^n])Z/$1nZ/g; # does work 为什么1不起作用?似乎合法?关于[\b^n]的两个问题: ^仅当字符类是第一个字符时才对其进行求反 […]匹配一个字符,但您正在尝试匹配字符以外的内容。其中,\
s/([\b^n])Z/$1nZ/g; # does not work
s/(\b|[^n])Z/$1nZ/g; # does work
为什么1不起作用?似乎合法?关于
[\b^n]
的两个问题:
仅当字符类是第一个字符时才对其进行求反^
匹配一个字符,但您正在尝试匹配字符以外的内容。其中,[…]
表示字符\b
(退格)08
[\b^n]
的两个问题:
仅当字符类是第一个字符时才对其进行求反^
匹配一个字符,但您正在尝试匹配字符以外的内容。其中,[…]
表示字符\b
(退格)08
非常感谢…谢谢大家-从来都不知道^1在CC中的位置不同 我把它移到CC的外面(标记一个开始),它就如预期的那样工作。我想我明白他们为什么这么做了(所以你可以在[]内使用^INTERNET来表示插入符号而不是否定)。但似乎逃离它也会有同样的效果。有时我想知道拉里在想什么,但自从我们公司削减了OSCON travel之后,我再也见不到他了
非常感谢…如果
^
不在字符类的开头,则表示文字字符^
不会否定此字符类。在同一字符类中不能有正匹配和负匹配,负类以^so[\b^n]匹配任何单词边界开始,^或注意[\b^n]
是一个包含三个或四个元素的字符类(^
和n
很容易;\b
可能是“backspace”或backslash和b
);这不重要,因为两者都不是你想要的。许多元字符在字符类中失去其特殊意义。如果^
不在字符类的开头,则表示文字字符^
不会否定此字符类。在同一字符类中不能有正匹配和负匹配,负类以^so[\b^n]开头匹配任何单词边界,^或注意[\b^n]
是一个包含三个或四个元素的字符类(^
和n
很容易;\b
可能是“backspace”或backslash和b
);这不重要,因为两者都不是你想要的。许多元字符在字符类中失去了其特殊意义。
s/([\b^n])Z/$1nZ/g; # does not work
s/(\b|[^n])Z/$1nZ/g; # does work