只有一个脱字符的字符类是什么意思?

12
在试图回答问题当找到特定字符时将文本写入新行时,我使用了Regexp::Grammars。它长期以来一直吸引着我,最终我有了学习的理由。我注意到作者在描述部分有一个LaTeX解析器(我是一个狂热的LaTeX用户,所以这让我感兴趣),但它有一个奇怪的构造,如下所示:
    <rule: Option>     [^][\$&%#_{}~^\s,]+

    <rule: Literal>    [^][\$&%#_{}~^\s]+

[^]字符类有什么作用?

1个回答

23

[^][…] 不是两个字符类,而只是一个字符类,包含除了 ][ 以外的任何其他字符(请参见括号内的特殊字符类):

但是,如果 ] 是括号字符类中的第一个字符(或者如果第一个字符是脱字符,则是第二个字符),它就不表示类的结尾(因为您不能有一个空的类),并且被视为可以匹配而无需转义的字符集的一部分。

例如:

"+"   =~ /[+?*]/     #  Match, "+" in a character class is not special.
"\cH" =~ /[\b]/      #  Match, \b inside in a character class
                     #  is equivalent to a backspace.
"]"   =~ /[][]/      #  Match, as the character class contains.
                     #  both [ and ].
"[]"  =~ /[[]]/      #  Match, the pattern contains a character class
                     #  containing just ], and the character class is
                     #  followed by a ].

@Gumbo 如果你能确定这就是 Perl 解析正则表达式的方式,我会删除我的(错误)回答。你确定吗? - Phrogz
@Phrogz,这就是Perl的处理方式。 - Qtax
@Gumbo,这似乎更符合LaTeX解析器所需的内容,在文档中有吗?!?! - Joel Berger
1
@manojlds 不,它们不会像这样在 Perl 中使用。 "The 117k guy" 知道他在说什么。 ;) - Qtax
@Gumbo,显然在JavaScript中[^]并不是无意义的,因为没有/s。;) - Qtax
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接