Buscar..


Observaciones

Terminología

Los siguientes términos también hacen referencia al carácter Caret (^):

  • sombrero
  • controlar
  • estrecho
  • cheurón
  • acento circunflejo

Uso

Tiene dos usos en expresiones regulares:

  • Para denotar el inicio de la línea.
  • Si se usa inmediatamente después de un corchete ( [^ ), niega el conjunto de caracteres permitidos (es decir, [123] significa que se permite el carácter 1, 2 o 3, mientras que la declaración [^123] significa cualquier carácter que no sea 1 , 2, o 3 está permitido.

Escape de personajes

Para expresar un cursor sin un significado especial, debe escaparse precediéndolo con una barra invertida; es decir \^ .

Comienzo de linea

Cuando el modificador de multilínea (?m) está desactivado , ^ coincide solo con el principio de la cadena de entrada:

Para el regex

^He

Las siguientes cadenas de entrada coinciden:

  • Hedgehog\nFirst line\nLast line
  • Help me, please
  • He

Y las siguientes cadenas de entrada no coinciden:

  • First line\nHedgehog\nLast line
  • IHedgehog
  • Hedgehog (por espacios en blanco )

Cuando se activa el modificador multilínea (?m) , ^ coincide con el comienzo de cada línea:

^He

Lo anterior coincidiría con cualquier cadena de entrada que contenga una línea que comience con He .

Considerando \n como el nuevo carácter de línea, las siguientes líneas coinciden:

  • Hello
  • First line\nHedgehog\nLast line (solo segunda línea)
  • My\nText\nIs\nHere (solo la última línea)

Y las siguientes cadenas de entrada no coinciden:

  • Camden Hells Brewery
  • Helmet (debido a espacios en blanco )

Coincidencia de líneas vacías usando ^

Otro caso de uso típico de caret es hacer coincidir líneas vacías (o una cadena vacía si el modificador multilínea está desactivado).

Para hacer coincidir una línea vacía (línea múltiple en ), se utiliza un símbolo de intercalación junto a $ que es otro carácter de ancla que representa la posición al final de la línea ( Caracteres de Ancla: Dólar ($) ). Por lo tanto, la siguiente expresión regular coincidirá con una línea vacía:

 ^$

Escapar del personaje de caret

Si necesita usar el carácter ^ en una clase de caracteres ( clases de caracteres ), póngalo en un lugar que no sea el principio de la clase:

[12^3]

O escapar de la ^ usando una barra invertida \ :

[\^123]

Si quieres hacer coincidir el personaje de caret en sí mismo fuera de una clase de personaje, necesitas escapar de él:

\^

Esto evita que ^ se interprete como el carácter de anclaje que representa el comienzo de la cadena / línea.

Comparación de inicio de línea de anclaje y comienzo de cadena de anclaje

Si bien muchas personas piensan que ^ significa el inicio de una cadena, en realidad significa el inicio de una línea. Para un inicio real de uso de anclaje de cadena, \A

La cadena hello\nworld (o más claramente)

hello
world

Coincidiría con las expresiones regulares ^h , ^w y \Ah pero no con \Aw

Modificador multilínea

Por defecto, caret ^ metacharacter coincide con la posición antes del primer carácter en la cadena.

Dada la cadena " charsequence " aplicada contra los siguientes patrones: /^char/ & /^sequence/ , el motor intentará coincidir de la siguiente manera:

  • /^char/

    • ^ - charsequence
    • c - c harsequence
    • h - ch arsequence
    • a - cha rsequence
    • r - char secuencia

    Coincidencia encontrada

  • /^sequence/

    • ^ - charsequence
    • s - charsequence

    Partido no encontrado

El mismo comportamiento se aplicará incluso si la cadena contiene terminadores de línea , como \r?\n Solo se emparejará la posición al comienzo de la cadena.

Por ejemplo:

/^/g

\Char \ r \ n
\ r \ n
secuencia

Sin embargo, si necesita hacer coincidir después de cada terminador de línea, tendrá que establecer el modo multilínea ( //m , (?m) ) dentro de su patrón. Al hacerlo, el carácter de intercalación ^ coincidirá con "el comienzo de cada línea", que corresponde a la posición al comienzo de la cadena y las posiciones inmediatamente después de 1 los terminadores de línea.

1 En algunos tipos (Java, PCRE, ...), ^ no coincidirá después del terminador de línea, si el terminador de línea es el último de la cadena.

Por ejemplo:

/^/gm

\Char \ r \ n
┊ \ r \ n
┊secuencia

Algunos de los motores de expresiones regulares que admiten el modificador multilínea:

  • Java

    Pattern pattern = Pattern.compile("(?m)^abc");
    Pattern pattern = Pattern.compile("^abc", Pattern.MULTILINE);
    
  • .RED

    var abcRegex = new Regex("(?m)^abc");
    var abdRegex = new Regex("^abc", RegexOptions.Multiline)
    
  • PCRE

    /(?m)^abc/
    /^abc/m
    
  • Python 2 y 3 (módulo de re incorporado)

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow