Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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 不确定为什么这个Perl正则表达式不起作用(字符类)_Regex_Perl_Regex Negation_Character Class - Fatal编程技术网

Regex 不确定为什么这个Perl正则表达式不起作用(字符类)

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]的两个问题: ^仅当字符类是第一个字符时才对其进行求反 […]匹配一个字符,但您正在尝试匹配字符以外的内容。其中,\

我试图在另一个特定的字符前面添加一个字符,除非前面已经有我试图注入的字符。这很好(在任何Z之前插入一个n,除非它前面已经有一个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之后,我再也见不到他了


非常感谢…

谢谢大家-从来都不知道^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