不知道为什么这个Perl正则表达式不工作(字符类)



我试图在另一个特定字符前面添加一个字符,除非它已经在我试图注入的字符之前。这很好(在任何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]的两个问题:

  • ^仅当它是第一个字符时才否定字符类。

  • [...]匹配字符,但您正在尝试匹配字符以外的其他内容。在这里,b表示字符08 (backspace)。

谢谢大家-从来不知道^在CC中的位置1是不同的。

我把它移到CC外(标记开始),它像预期的那样工作。我想我知道他们为什么这么做了(所以你可以使用^ within[]来表示插入符号而不是否定)。但似乎逃离它也会有同样的效果。有时我想知道拉里在想什么,但自从我们公司取消了OSCON旅行后,我就再也见不到他了。

感谢…

相关内容

  • 没有找到相关文章

最新更新