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.
Karakter | Hva gjør den? | Eksempel | Fyrstikker |
---|---|---|---|
^ | Matcher begynnelsen av linjen | ^ abc | abc, abcdef .., abc123 |
$ | Matcher slutten av linjen | abc $ | min: abc, 123abc, theabc |
. | Match et hvilket som helst tegn | ac | abc, asg, a2c |
| | ELLER operatør | abc | xyz | abc 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 * c | abc, abbcc, abcdc |
+ | Samsvarer tegn før + en eller flere ganger | a + c | ac, aac, aaac, |
? | Passer tegnet før? null eller en gang. Også brukt som en ikke-grådig kamp | ab? c | ac, abc |
\ | Unnslippe tegnet etter bakslaget eller opprett en fluktssekvens. | a \ sc | ac |
Escape-tegn (escape-sekvens)
Merk: fluktegnene er saksfølsomme.
Karakter | Hva 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 () [] {} ^ $. | * +? \ |
\ 0 | Null karakter |
\en | Match en bjelle eller alarm. |
\ b | Ordgrense i de fleste eller backspace |
\ B | Ikke ordgrense |
\ d | Match et desimaltall (0-9) |
\ D | Match noen ikke-siffer |
\ e | Match en flukt |
\ f | Match en skjema feed |
\ n | Match en ny linje |
\ Q ... \ E | Ignorerer noen spesiell betydning i det som matches. |
\ r | Match en vognretur |
\ s | Matcher et mellomromstegn (mellomrom, \ t, \ r, \ n) |
\ S | Passer til et ikke-hvitt mellomrom |
\ t | Match en kategori |
\ v | Match en vertikal fan |
\ w | Matcher et ordord [a-zA-Z_0-9] |
\ W | Samsvarer et ikke-ord karakter |
Regelmessige uttrykksflagger
Utenfor det vanlige uttrykket (på slutten) kan flaggene brukes til å hjelpe med mønstermatchingen.
Karakter | Hva gjør den? |
---|---|
Jeg | Ignorer saken (små og store bokstaver tillatt) |
m | Multi-line match |
s | Match nye linjer |
x | Tillat mellomrom og kommentarer |
J | Dupliserer gruppenavn tillatt |
U | Ungreedy 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