Когда я должен использовать \ A в регулярных выражениях? - PullRequest
14 голосов
/ 16 апреля 2010

Якорь конца строки $ совпадает даже с дополнительным трейлингом \n в соответствующей строке, поэтому мы используем \Z вместо $

Например

^\w+$ будет соответствовать строке abcd\n, но ^\w+\Z не

Как насчет \A и когда использовать?

Ответы [ 4 ]

23 голосов
/ 16 апреля 2010

Чаще всего он используется при включении многострочных совпадений. Поскольку \A совпадает только в начале ВСЕГО текста, а не в начале строки, в регулярных выражениях, которые могут совпадать между строками, функциональные возможности ^ и \A различны.

4 голосов
/ 16 апреля 2010

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

Для Perl, см. Документы perlre для подробностей об утверждениях нулевой ширины:

\b  Match a word boundary
\B  Match except at a word boundary
\A  Match only at beginning of string
\Z  Match only at end of string, or before newline at the end
\z  Match only at end of string
\G  Match only at pos() (e.g. at the end-of-match position
    of prior m//g)
2 голосов
/ 23 апреля 2010

Если регулярное выражение, с которым вы работаете, поддерживает \A, то я рекомендую всегда использовать его вместо ^. \A всегда совпадает в начале строки только во всех вариантах, которые ее поддерживают. Нет проблем с переносами строк.

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

Используя \A, вы уменьшаете вероятность путаницы, когда кто-то другой должен поддерживать ваш код.

2 голосов
/ 16 апреля 2010

Не имеет прямого отношения к вашему вопросу в соответствии с использованными вами тегами, но есть хотя бы один язык (Ruby), где ^ и $ всегда означают начало / конец строки, поэтому, если вы хотите сопоставить начало / конец строки, у вас есть для использования \A и \Z или \z.

Если вы хотите, чтобы ваши регулярные выражения были переносимыми, рекомендуется явно указывать, что вы хотите от них делать, вместо того, чтобы полагаться на наличие модификаторов режима, таких как \m или Regex.MULTILINE и т. Д.

С другой стороны, JavaScript, POSIX и XML не поддерживают \A и \Z. Здесь вам пригодятся такие инструменты, как RegexBuddy , которые переводят регулярные выражения из одного варианта в другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...