Sök…


Anmärkningar

Terminologi

Karet (^) -tecknet hänvisas också till av följande termer:

  • hatt
  • kontrollera
  • uppåtpil
  • sparre
  • circumflex accent

Användande

Det har två användningsområden i vanliga uttryck:

  • För att markera början av raden
  • Om den används omedelbart efter en kvadratisk konsol ( [^ ) verkar det att negera uppsättningen tillåtna tecken (dvs. [123] betyder tecknet 1, 2 eller 3 är tillåtet, medan uttalandet [^123] betyder något annat tecken än 1 , 2 eller 3 är tillåtet.

Karaktär som flyr

För att uttrycka en caret utan särskild betydelse, bör den undgås genom att föregå den med ett motsats; dvs \^ .

Start av linjen

När modifieraren för flera linjer (?m) är avstängd , matchar ^ bara ingångsträngens början:

För regexen

^He

Följande inmatningssträngar matchar:

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

Och följande ingångssträngar inte matchar:

  • First line\nHedgehog\nLast line
  • IHedgehog
  • Hedgehog (på grund av vita utrymmen )

När modifiering av flera linjer (?m) är , matchar ^ varje rads början:

^He

Ovanstående skulle matcha alla inmatningssträngar som innehåller en rad som börjar med He .

Med tanke på \n som det nya linjetecknet matchar följande rader:

  • Hello
  • First line\nHedgehog\nLast line (endast andra raden)
  • My\nText\nIs\nHere (endast sista raden)

Och följande ingångssträngar inte matchar:

  • Camden Hells Brewery
  • Helmet (på grund av vita utrymmen )

Matcha tomma rader med ^

Ett annat typiskt användningsfall för caret är att matcha tomma rader (eller en tom sträng om flernradsmodifieraren är avstängd).

För att matcha en tom rad (flera linjer ) används en caret bredvid en $ som är ett annat ankarstecken som representerar positionen i slutet av raden ( Anchor Characters: Dollar ($) ). Därför matchar följande reguljära uttryck en tom rad:

 ^$

Rymmer caret-karaktären

Om du behöver använda ^ -tecknet i en teckenklass (teckenklasser ), lägger du antingen någon annanstans än klassens början:

[12^3]

Eller undgå ^ hjälp av ett backslash \ :

[\^123]

Om du vill matcha själva caret-karaktären utanför en karaktärsklass måste du fly den:

\^

Detta förhindrar att ^ tolkas som ankaretecken som representerar början av strängen / linjen.

Jämförelse start av linjeankare och börja strängankare

Medan många tycker att ^ betyder början på en sträng, betyder det faktiskt början av en rad. För en faktisk början av strängförankringsanvändning, \A

Strängen hello\nworld (eller tydligare)

hello
world

Skulle matchas av reguljära uttryck ^h , ^w och \Ah men inte av \Aw

Multiline modifier

Som standard matchar caret ^ metacharacter positionen före det första tecknet i strängen.

Med tanke på strängen " charsequence " som tillämpas mot följande mönster: /^char/ & /^sequence/ kommer motorn att försöka matcha enligt följande:

  • /^char/

    • ^ - charsequence
    • c - c konsekvens
    • h - ch följd
    • a - cha följd
    • r - char sekvens

    Match hittades

  • /^sequence/

    • ^ - charsequence
    • s - charsequence

    Match hittades inte

Samma beteende tillämpas även om strängen innehåller linjeavslutare , till exempel \r?\n Endast positionen i början av strängen kommer att matchas.

Till exempel:

/^/g

┊char \ r \ n
\ R \ n
sekvens

Men om du behöver matcha efter varje radterminator måste du ställa in multiline- läget ( //m , (?m) ) i ditt mönster. Genom att göra det kommer caret ^ att matcha "början på varje rad", vilket motsvarar positionen i början av strängen och positionerna omedelbart efter 1 linjeavslutarna.

1 I vissa smaker (Java, PCRE, ...) kommer ^ inte att matcha efter radterminatorn, om linjeterminatorn är den sista i strängen.

Till exempel:

/^/gm

┊char \ r \ n
┊ \ r \ n
┊sequence

Några av de vanliga expressionsmotorerna som stöder Multiline modifierare:

  • Java

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

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

    /(?m)^abc/
    /^abc/m
    
  • Python 2 & 3 (inbyggd re modul)

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow