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 -
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:
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/m
Python 2 & 3 (inbyggd
re
modul)abc_regex = re.compile("(?m)^abc"); abc_regex = re.compile("^abc", re.MULTILINE);