【问题标题】:What does a character class with only a lone caret do?只有一个插入符号的字符类有什么作用?
【发布时间】:2011-09-14 00:11:17
【问题描述】:

在尝试回答问题Writing text into new line when a particular character is found 时,我使用了Regexp::Grammars。我一直对它感兴趣,最后我有理由学习。我注意到作者的描述部分有一个 LaTeX 解析器(我是一个狂热的 LaTeX 用户,所以这让我很感兴趣)但是这里有一个奇怪的结构:

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

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

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

【问题讨论】:

    标签: regex perl latex regexp-grammars


    【解决方案1】:

    [^][…] 不是两个字符类,而只是一个包含除][ 之外的任何其他字符的字符类(参见Special Characters Inside a Bracketed Character Class):

    但是,如果] 是括号字符类的第一个(如果第一个字符是插入符号,则为第二个)字符,它并不表示类的结束(如你不能有一个空类)并且被认为是可以匹配而无需转义的字符集的一部分。

    例子:

    "+"   =~ /[+?*]/     #  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,这就是 Perl 的处理方式。
    • @Gumbo,这似乎更符合 LaTeX 解析器的需求,是在文档中的某个地方吗?!?!
    • @Gumbo - 在字符类中 [] 必须始终转义。我不认为你说的是​​这里的情况。
    • @manojlds 不,他们没有,反正在 Perl 中这样使用时也不会。 117k 的人 知道他在说什么。 ;)
    猜你喜欢
    • 2011-04-06
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多