ReguljÀra uttryck (med exempel) - 1

"Och nu ska jag berÀtta om reguljÀra uttryck. Det hÀr Àmnet Àr bÄde komplext och enkelt pÄ samma gÄng. För att riktigt förstÄ reguljÀra uttryck kan du behöva lÀsa tvÄ eller tre rejÀla böcker, men jag kan lÀra dig hur du anvÀnder dem just nu."

"Som erfarna programmerare gillar att skÀmta, om du har ett problem och tror att du ska lösa det med reguljÀra uttryck, nu har du tvÄ problem."

"Hmm."

"Jag hoppas att jag inte skrÀmde dig för mycket, min vÀn. Nej?"

"Okej, bra. SÄ, vÄrt nya Àmne Àr reguljÀra uttryck."

"Om vi ​​förenklar dem Ă€r reguljĂ€ra uttryck mönster för strĂ€ngar."

"Du kan kontrollera om en strÀng matchar ett givet mönster. Du kan ocksÄ dela upp en strÀng i delar med hjÀlp av en avgrÀnsare eller ett mönster."

"Men lÄt oss börja med nÄgot enkelt: vad Àr ett mönster? "

"I SQL (men inte i Java) kan du kontrollera om en strÀng matchar ett visst mönster. SÄ hÀr ser det ut:"

name like 'Alex%'

HÀr Àr namn en variabel, som Àr ett kommando för att kontrollera ett mönster, och "Alex%" Àr mönstret.

I det hÀr fallet betyder % vilken strÀng eller delstrÀng som helst.

Mönster Snören som matchar mönstret
"Alex%" Alex
Alex andr
Alexander
Alex andra

 .
'%x%' Ma x
Ma x im
Ale x andr


'%a' Olg a
Helen och
Ir a
...

"I SQL, om du behöver ange att det bara ska finnas ett annat tecken, sÄ anvÀnder du understreckstecknet: "_"."

Mönster Snören som matchar mönstret
'Alex%_' Alex
Alex andr
Alexander
Alex andra

 .
'_x' Axe
Bx
Cx


'___' Aaa
Aab
Bbb



"Det kÀnns logiskt."

"Okej, lÄt oss gÄ vidare till reguljÀra uttryck."

"ReguljÀra uttryck inkluderar vanligtvis begrÀnsningar inte bara för antalet tecken, utan ocksÄ deras "innehÄll". "Varje mask som helst bestÄr vanligtvis av tvÄ (ibland fler) delar: den första beskriver tecknets "preferenser" och den andra beskriver antalet tecken ."

"HÀr Àr nÄgra innehÄllsexempel :"

Mönster Beskrivning Exempel
. Vilken karaktÀr som helst 1
\d Vilken siffra som helst 7
\D Alla icke-siffriga C
\s Ett mellanslag, radbrytning eller tabbtecken ' '
\S Allt utom mellanslag, tabbar och radbrytningar f
[az] Vilken bokstav som helst frÄn a till z z
[0-9] Vilken siffra som helst frÄn 0 till 9. 8
\w Vilket ord som helst c
\W Alla tecken som inte Àr ord _

"Jag kommer inte ihÄg dem direkt, men det ser inte sÄ svÄrt ut."

"UtmÀrkt, hÀr Àr exempel pÄ antalet tecken i en mask: "

Mönster Beskrivning Exempel
A? Tecknet "A" förekommer en gÄng eller inte alls A
B+ Tecknet 'B' förekommer en eller flera gÄnger BBBB
C* Tecknet 'C' förekommer noll eller fler gÄnger CCC
D{n} Tecknet 'D' förekommer n gÄnger Mönstret D{4} matchar DDDD
E{n,} Tecknet 'E' förekommer n eller flera gÄnger Mönstret E{2,} matchar EEEEEEE
F{n,m} Tecknet 'F' förekommer mellan n och m gÄnger Mönstret E{2,4} matchar EEEE

"Det hela verkar ganska okomplicerat."

"Du kommer pÄ allt sÄ snabbt. LÄt oss nu se hur det ser ut tillsammans:"

Mönster Beskrivning Exempel
[annons]? Ett tecken mellan 'a' och 'd' förekommer en gÄng eller inte alls a, b, c, d
[bd,z]+ Tecknen 'b', 'c', 'd' eller 'z' förekommer en eller flera gÄnger b, bcdcdbdbdbdbzzzzbbzbzb, zbz
[1,7-9]* Siffrorna 1, 7, 8 eller 9 förekommer noll eller fler gÄnger 1, 7, 9, 9777, 111199
1{5} Siffran 1 förekommer 5 gÄnger 11111
[1,2,a,b]{2} Symbolerna 1, 2, 'a' eller 'b' förekommer tvÄ gÄnger 11, 12, 1a, ab, 2b, bb, 22
[a,0]{2,3} Symbolerna 'a' eller 0 förekommer 2 eller 3 gÄnger aa, a0,00,0a, aaa,000, a00,0a0, a0a

"Fortfarande allt klart."

"Verkligen? Hmm. Antingen förklarade jag allt riktigt bra eller sÄ Àr du för snabb pÄ upptagningen. NÄvÀl, hur som helst, det Àr bra för oss."

"HÀr Àr ett par nya insikter för dig."

"Eftersom reguljÀra uttryck ofta anvÀnds för att hitta delstrÀngar kan vi lÀgga till ytterligare tvÄ tecken (^ och $) till vÄra mönster."

"^ betyder att delstrÀngen mÄste inkludera början av strÀngen."

"$ betyder att delstrÀngen mÄste inkludera slutet av strÀngen."

"HÀr Àr nÄgra exempel:"

Mönster StrÀng och delstrÀngar som matchar mönstret
en{3} aaa  a  aaa  aaa  _
en{3}$ aaa a aaa  aaa
^a{3} aaa  a aaa aaa
^a{3}$ aaa a aaa a aaa

"Och ytterligare en viktig punkt."

"I reguljÀra uttryck har följande tecken speciell betydelse: [ ] \ / ^ $ . | ? * + ( ) { }. De kallas kontrolltecken. SÄ du kan inte bara anvÀnda dem i strÀngar."

"Som i Java-kod mÄste de escapes. "Och igen som i Java-kod, anvÀnds tecknet '\' för detta."

"Om vi ​​vill beskriva en strĂ€ng som bestĂ„r av tre '?" tecken kan vi inte skriva '?{3}', eftersom '?' Ă€r ett kontrolltecken. Vi mĂ„ste göra det sĂ„ hĂ€r: \?{3}. Om vi ​​vill anvĂ€nda ett '\'-tecken, mĂ„ste vi skriva '\\'."

"Ok, förstÄr."

"Och nu kommer hÀr en annan intressant godbit. I filer med Java-kod mÄste '\'-tecknet ocksÄ escapes i strÀngar, eftersom det Àr ett kontrolltecken."

"SjÀlvklart."

"SÄ, om du försöker definiera ett reguljÀrt Java-uttryck i en strÀng, mÄste du undkomma tecknet '\' tvÄ gÄnger."

"HÀr Àr ett exempel:"

Jag vill ha en mask som matchar "c:\anything"
I teorin bör det reguljÀra uttrycket se ut sÄ hÀr:
ett "c"-tecken,
kolon,
omvÀnt snedstreck,
punkt och asterisk (för att beteckna valfritt antal tecken). Jag lade till mellanslag för att förbÀttra lÀsbarheten:
c : \ .*
Men tecknen '\' och '.' mÄste escapes, sÄ det reguljÀra uttrycket kommer att se ut sÄ hÀr:
c :   \\ \. *
Eller, utan mellanslag
c: \\ \. *
"Vi bör ha tre omvÀnda snedstreck i vÄrt reguljÀra uttryck.
Det betyder att i en Java-fil kommer det reguljÀra uttrycket att se ut sÄ hÀr:"
String regexp = "c: \\\\ \\ . *";

"Wow! Whoa. Nu vet jag."

"Och om du bestÀmmer dig för att grÀva djupare i detta, hÀr Àr ett par bra lÀnkar:"

Lektion pÄ Wikipedia