Hva er en Regex (Regular Expression)?

Kort for vanlig uttrykk, er en regex en tekststreng som lar deg lage mønstre som hjelper til med å finne, finne og administrere tekst. Perl er et godt eksempel på et programmeringsspråk som bruker regelmessige uttrykk. Men det er bare ett av de mange stedene du kan finne vanlige uttrykk. Vanlige uttrykk kan også brukes fra kommandolinjen og i tekstredigerere for å finne tekst i en fil.

Når du først prøver å forstå vanlige uttrykk, virker det som om det er et annet språk. Mastering av vanlige uttrykk kan imidlertid spare tusenvis av timer hvis du jobber med tekst eller må analysere store mengder data. Nedenfor er et eksempel på et regulært uttrykk med hver av komponentene merket. Dette regulære uttrykket vises også i Perl programmeringseksempler som vises senere på denne siden.

Grunnleggende om regelmessige uttrykk (jukseark)

Ser på eksempelet ovenfor kan være overveldende. Men når du forstår den grunnleggende syntaksen av hvordan vanlige uttrykkskommandoer fungerer, kan du lese eksemplet ovenfor som om du leser denne setningen. Dessverre bruker ikke alle programmer, kommandoer og programmeringsspråk de samme regulære uttrykkene, men alle deler likheter.

KarakterHva gjør den?EksempelFyrstikker
^Matcher begynnelsen av linjen^ abcabc, abcdef .., abc123
$Matcher slutten av linjenabc $min: abc, 123abc, theabc
.Match et hvilket som helst tegnacabc, asg, a2c
|ELLER operatørabc | xyzabc eller xyz
(...)Capture alt som er matchet(A) b (c)Fanger 'a' og 'c'
(:? ...)Ikke-fangstgruppe(A) b (?: C)Fanger 'a', men bare grupper 'c'
[...]Passer alt i parentes[Abc]a, b eller c
[^ ...]Samsvarer alt som ikke finnes i parentes[^ Abc]xyz, 123, 1de
[A]Passer alle tegn mellom 'a' og 'z'[Bz]bc, sinn, xyz
{X}Den eksakte "x" mengden ganger å matche(ABC) {2}abcabcabc
{X, }Match 'x' antall ganger eller mer(ABC) {2}abcabc, abcabcabc
{X, y}Match mellom 'x' og 'y' ganger.(A) {2, 4}aa, aaa, aaaaa
*Greedy kamp som matcher alt i stedet for *ab * cabc, abbcc, abcdc
+Samsvarer tegn før + en eller flere gangera + cac, aac, aaac,
?Passer tegnet før? null eller en gang. Også brukt som en ikke-grådig kampab? cac, abc
\Unnslippe tegnet etter bakslaget eller opprett en fluktssekvens.a \ scac

Escape-tegn (escape-sekvens)

Merk: fluktegnene er saksfølsomme.

KarakterHva gjør den?
\Et hvilket som helst tegn som ikke er nevnt nedenfor før en \ vil bli rømt. For eksempel, \. matcher en periode og utfører ikke funksjonen nevnt ovenfor. Tegn som skal unngås er () [] {} ^ $. | * +? \
\ 0Null karakter
\enMatch en bjelle eller alarm.
\ bOrdgrense i de fleste eller backspace
\ BIkke ordgrense
\ dMatch et desimaltall (0-9)
\ DMatch noen ikke-siffer
\ eMatch en flukt
\ fMatch en skjema feed
\ nMatch en ny linje
\ Q ... \ EIgnorerer noen spesiell betydning i det som matches.
\ rMatch en vognretur
\ sMatcher et mellomromstegn (mellomrom, \ t, \ r, \ n)
\ SPasser til et ikke-hvitt mellomrom
\ tMatch en kategori
\ vMatch en vertikal fan
\ wMatcher et ordord [a-zA-Z_0-9]
\ WSamsvarer et ikke-ord karakter

Regelmessige uttrykksflagger

Utenfor det vanlige uttrykket (på slutten) kan flaggene brukes til å hjelpe med mønstermatchingen.

KarakterHva gjør den?
JegIgnorer saken (små og store bokstaver tillatt)
mMulti-line match
sMatch nye linjer
xTillat mellomrom og kommentarer
JDupliserer gruppenavn tillatt
UUngreedy match

Perl programmeringsspråk regelmessige ekspressionseksempler

Nedenfor er noen eksempler på regulære uttrykk og mønstermatching i Perl. Mange av disse eksemplene er like eller de samme til andre programmeringsspråk og programmer som støtter vanlige uttrykk.

 $ data = ~ s / dårlig data / gode data / jeg; 

Eksemplet ovenfor erstatter eventuelle "dårlige data" med "gode data" ved hjelp av en sak-følsom kamp. Så hvis $ data variabelen var "Her er dårlige data" ville det bli "Her er gode data".

 $ data = ~ s / a / a /; 

Dette eksemplet erstatter noen små bokstaver a med en stor bokstav A. Så hvis $ data var "eksempel" ville det bli "exAmple".

 $ data = ~ s / [az] / * /; 

Eksemplet ovenfor erstatter noen små bokstaver, a gjennom z, med en stjerne. Så hvis $ data var "Eksempel", ville det bli "E ******".

 $ data = ~ s / e $ / es /; 

Dette eksemplet bruker $ tegn, som forteller det vanlige uttrykket for å matche teksten før det på slutten av strengen. Så hvis $ data var "eksempel" ville det bli "eksempler".

 $ data = ~ s /\./ !/; 

I eksemplet ovenfor erstatter vi en periode med et utropstegn. Fordi perioden er et meta-tegn hvis du bare har skrevet inn en periode uten \ (escape), blir den behandlet som et tegn. I dette eksemplet, hvis $ data var "eksempel". det ville bli "eksempel!", men hvis du ikke hadde unnslippe, ville det erstatte alle tegn og bli "!!!!!!!!"

 $ data = ~ s / ^ e / E /; 

Til slutt, i dette eksempelet ovenfor, forteller caret (^) det vanlige uttrykket for å matche alt i begynnelsen av linjen. I dette eksemplet vil dette matche alle små bokstaver e i begynnelsen av linjen og erstatte den med en hovedstol E. Derfor, hvis $ data var "eksempel", ble det "Eksempel".

Tips: Hvis du vil utforske regulære uttrykk enda mer i kommandoer som grep, eller vanlige uttrykk i programmeringsspråket, sjekk ut O'Reilly-boken "Mastering regular expressions."

Computer akronymer, Escape-sekvens, Expression, Glob, Meta-character, Programmeringsbetingelser, Tilde, Wildcard