что соответствует этому регулярному выражению? - PullRequest
0 голосов
/ 11 июля 2011
/[^\\]\]/

Чему соответствует это регулярное выражение?

Попытка сопоставить "]" как-то. Я не уверен, как именно.

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 11 июля 2011

Соответствует любому отдельному символу, который не является обратной косой чертой \, за которым следует закрывающая квадратная скобка ].

Эти строки соответствуют:

"[]" =~ /[^\\]\]/;       # []
"[abc]def" =~ /[^\\]\]/; # c]

Эти строки не совпадают:

"]" =~ /[^\\]\]/;        # No character preceding ]
"[\]" =~ /[^\\]\]/;      # Backslash preceding ]

Если вы пытаетесь сопоставить ] до тех пор, пока ему не предшествует \, используйте отрицательное утверждение в виде взгляда вместо отрицательного класса символов:

/(?<!\\)\]/

(или см. Комментарии)

4 голосов
/ 11 июля 2011

Я знаю, что это вопрос Perl, но если у вас установлен Python, он может быть полезен для отладки подобных регулярных выражений.

$ python
>>> import re
>>> re.compile(r"[^\\]\]", re.DEBUG)
not_literal 92
literal 93

Это говорит нам о том, что он ищет любой символ, который не являетсяASCII 92 (обратная косая черта \), за которой следует символ ASCII 93 (закрывающая скобка ]).


Теперь я вижу, что в Perl есть похожая функция.Кажется менее дружелюбным.

$ perl
use re 'debug';
/[^\\]\]/;
Compiling REx "[^\\]\]"
Final program:
   1: ANYOF[\0-[\]-\377][{unicode_all}] (12)
  12: EXACT <]> (14)
  14: END (0)
anchored "]" at 1 (checking anchored) stclass ANYOF[\0-[\]-\377][{unicode_all}] minlen 2 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...