![ReguljÀra uttryck (med exempel) - 1](https://cdn.codegym.cc/images/article/738ef12c-b023-40bb-9b54-e58bf6c77726/800.jpeg)
"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 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:"
GO TO FULL VERSION