Regular Expressions
Якорные персонажи: Карет (^)
Поиск…
замечания
терминология
Характер Caret (^) также обозначается следующими терминами:
- шапка
- контроль
- стрелка вверх
- шеврон
- округлый акцент
использование
Он имеет два применения в регулярных выражениях:
- Чтобы обозначить начало строки
- Если он используется сразу после квадратной скобки (
[^), он действует, чтобы свести на нет множество допустимых символов (т. Е.[123]означает, что символ 1, 2 или 3 разрешен, а оператор[^123]означает любой символ, отличный от 1 , 2 или 3.
Сбой символа
Чтобы выразить каретку без особого значения, ее следует избегать, предшествуя ей обратным слэшем; т. е. \^ .
Начало линии
Когда многострочный (?m) модификатор выключен , ^ соответствует только началу входной строки:
Для регулярного выражения
^He
Следующие строки ввода соответствуют:
-
Hedgehog\nFirst line\nLast line -
Help me, please -
He
И следующие строки ввода не совпадают:
-
First line\nHedgehog\nLast line -
IHedgehog -
Hedgehog(из-за белых пространств)
Когда многострочный (?m) модификатор включен, ^ совпадает с началом каждой линии в:
^He
Вышеупомянутое будет соответствовать любой входной строке, содержащей строку, начинающуюся с He .
Учитывая \n как новый символ линии, следующие строки соответствуют:
-
Hello -
First line\nHedgehog\nLast line(только вторая строка) -
My\nText\nIs\nHere(только последняя строка)
И следующие строки ввода не совпадают:
-
Camden Hells Brewery -
Helmet(из-за белых пространств)
Соответствие пустых строк с помощью ^
Другим типичным вариантом использования для каретки является сопоставление пустых строк (или пустая строка, если многострочный модификатор выключен).
Чтобы соответствовать пустой строке (multi-line on ), каретка используется рядом с $ который является другим символом привязки, представляющим позицию в конце строки ( Anchor Characters: Dollar ($) ). Поэтому следующее регулярное выражение будет соответствовать пустой строке:
^$
Избегание символа каретки
Если вам нужно использовать символ ^ в символьном классе ( классы символов ), поставьте его где-то иначе, чем начало класса:
[12^3]
Или избегайте ^ используя обратную косую черту \ :
[\^123]
Если вы хотите совместить символ каретки вне класса персонажа, вам нужно сбежать от него:
\^
Это предотвращает интерпретацию ^ как якорный символ, представляющий начало строки / строки.
Сравнение начала линейного якоря и начала привязки строки
Хотя многие считают, что ^ означает начало строки, это на самом деле означает начало строки. Для фактического начала использования привязки строк, \A
Строка hello\nworld (или более ясно)
hello
world
Соответствовали бы регулярным выражениям ^h , ^w и \Ah но не \Aw
Многострочный модификатор
По умолчанию каретки ^ метасимвол соответствует положению перед первым символом в строке.
Учитывая, что строка « charsequence » применяется к следующим шаблонам: /^char/ & /^sequence/ , движок будет пытаться соответствовать следующим образом:
/^char/- ^ -
CharSequence - c -
charsequence - h -
charsequence - a -
charsequence - r - последовательность
char
Найдено совпадение
- ^ -
/^sequence/- ^ -
CharSequence - s -
CharSequence
Матч не найден
- ^ -
Такое же поведение будет применено, даже если строка содержит ограничители строк , такие как \r?\n Будет соответствовать только позиция в начале строки.
Например:
/^/g
┊char \ г \ п
\ Г \ п
последовательность
Однако, если вам нужно сопоставлять после каждого терминатора линии, вам нужно будет установить многострочный режим ( //m , (?m) ) внутри вашего шаблона. Поступая таким образом, каретка ^ будет соответствовать «начало каждой строки», что соответствует положению в начале строки и позиции сразу же после того, как 1 линия терминаторов.
1 В некоторых вариантах (Java, PCRE, ...), ^ не будет совпадать после терминатора строк, если терминатор линии является последним в строке.
Например:
/^/gm
┊char \ г \ п
┊ \ г \ п
┊sequence
Некоторые из двигателей регулярных выражений, которые поддерживают модификатор Multiline:
Pattern pattern = Pattern.compile("(?m)^abc"); Pattern pattern = Pattern.compile("^abc", Pattern.MULTILINE);var abcRegex = new Regex("(?m)^abc"); var abdRegex = new Regex("^abc", RegexOptions.Multiline)/(?m)^abc/ /^abc/mPython 2 и 3 (встроенный модуль
re)abc_regex = re.compile("(?m)^abc"); abc_regex = re.compile("^abc", re.MULTILINE);