Поиск…


замечания

терминология

Характер 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 - c harsequence
    • h - ch arsequence
    • a - cha rsequence
    • 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)
    
  • PCRE

    /(?m)^abc/
    /^abc/m
    
  • Python 2 и 3 (встроенный модуль re )

    abc_regex = re.compile("(?m)^abc");
    abc_regex = re.compile("^abc", re.MULTILINE); 
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow