Regular Expressions
Ankartecken: Caret (^)
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 på , 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 på ) 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 -
ckonsekvens - h -
chföljd - a -
chaföljd - r -
charsekvens
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:
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 (inbyggd
remodul)abc_regex = re.compile("(?m)^abc"); abc_regex = re.compile("^abc", re.MULTILINE);