Что делает класс персонажей с одинокой каретой? - PullRequest
11 голосов
/ 13 июня 2011

Пытаясь ответить на вопрос При вводе текста в новую строку при обнаружении определенного символа я использовал Regexp :: Grammars .Это меня давно интересовало и наконец у меня появилась причина учиться.Я заметил, что в разделе описания у автора есть анализатор LaTeX (я заядлый пользователь LaTeX, так что это меня заинтересовало), но здесь есть одна странная конструкция:

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

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

Что означает символ [^]занятия выполнять?

1 Ответ

21 голосов
/ 13 июня 2011

[^][…] - это не два класса символов, а только один класс символов, содержащий любой другой символ, кроме ], [ и (см. Специальные символы внутри класса символов в скобках ):

Однако, если ] является первым (или вторым, если первый символ является символом каретки) класса символов в квадратных скобках, он не обозначает конец класса (как вы не может иметь пустой класс) и считается частью набора символов, которые могут быть сопоставлены без экранирования.

Примеры:

"+"   =~ /[+?*]/     #  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 ].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...