
"És most a reguláris kifejezésekről fogok beszélni. Ez a téma egyszerre összetett és egyszerű. A reguláris kifejezések alapos megértéséhez két-három komoly könyvet kell elolvasnia, de megtaníthatom, hogyan kell használni őket. épp most."
"Amint a tapasztalt programozók szeretnek viccelődni, ha van egy problémád, és azt gondolod, hogy reguláris kifejezésekkel fogod megoldani, akkor most két problémád van."
– Hmm.
– Remélem, nem ijesztettelek meg túlságosan, barátom. Nem?
"Rendben, jó. Tehát az új témánk a reguláris kifejezések."
"Ha túlságosan leegyszerűsítjük őket, a reguláris kifejezések a karakterláncok mintái."
"Ellenőrizheti, hogy egy karakterlánc egyezik-e egy adott mintával. Egy karakterláncot részekre is oszthat határoló vagy minta segítségével."
"De kezdjük valami egyszerűvel: mi az a minta? "
"SQL-ben (de Java-ban nem) ellenőrizheti, hogy egy karakterlánc egyezik-e egy adott mintával. Így néz ki:"
name like 'Alex%'
Itt a név egy változó, mint a minta ellenőrzésére szolgáló parancs, az "Alex%" pedig a minta.
Ebben az esetben a % bármilyen karakterláncot vagy részkarakterláncot jelent.
Minta | A mintához illő húrok |
---|---|
"Alex%" | Alex Alex andr Alex ander Alex andra …. |
'%x%' | Ma x Ma x im Ale x andr … |
'%a' | Olg és Helen és Ir a … |
"Ha SQL-ben meg kell adni, hogy csak egy másik karakter legyen, akkor az aláhúzás karaktert használja: "_".
Minta | A mintához illő húrok |
---|---|
"Alex%_" | Alex andr Alex ander Alex andra …. |
'_x' | Axe Bx Cx … |
'___' | Aaa Aab Bbb … |
"Ennek van értelme."
– Oké, akkor térjünk át a reguláris kifejezésekre.
"A reguláris kifejezések jellemzően nemcsak a karakterek számát, hanem a "tartalmukat" is korlátozzák. "Minden maszk általában két (néha több) részből áll: az első a karakterek "beállításait", a második pedig a karakterek számát írja le. ."
"Íme néhány tartalmi példa:"
Minta | Leírás | Példák |
---|---|---|
. | Bármelyik karakter | 1 |
\d | Bármilyen számjegy | 7 |
\D | Bármilyen nem számjegyű | C |
\s | Szóköz, sortörés vagy tabulátor karakter | '' |
\S | Bármi, kivéve a szóközöket, a tabulátorokat és a sortöréseket | f |
[az] | Bármely betű a-tól z-ig | z |
[0-9] | Bármely számjegy 0 és 9 között. | 8 |
\w | Bármilyen szó karakter | c |
\W | Bármilyen nem szó karakter | _ |
– Nem fogok azonnal emlékezni rájuk, de nem tűnik túl nehéznek.
"Kiváló, akkor itt vannak példák a maszk karaktereinek számára: "
Minta | Leírás | Példák |
---|---|---|
A? | Az „A” karakter egyszer vagy egyáltalán nem fordul elő | A |
B+ | A „B” karakter egyszer vagy többször előfordul | BBBB |
C* | A „C” karakter nulla vagy többször fordul elő | CCC |
D{n} | A „D” karakter n-szer fordul elő | A D{4} minta megegyezik a DDDD-vel |
E{n,} | Az „E” karakter n vagy többször előfordul | Az E{2,} minta megfelel az EEEEEEE-nek |
F{n,m} | Az „F” karakter n és m között fordul elő | Az E{2,4} minta megfelel az EEEE-nek |
– Mindez elég egyértelműnek tűnik.
"Olyan gyorsan mindent felfogsz. Most pedig nézzük meg, hogyan néz ki együtt:"
Minta | Leírás | Példák |
---|---|---|
[hirdetés]? | Az „a” és „d” közötti karakter egyszer vagy egyáltalán nem fordul elő | a, b, c, d |
[bd,z]+ | A „b”, „c”, „d” vagy „z” karakterek egy vagy több alkalommal fordulnak elő | b, bcdcdbdbdbdbzzzzbbzbzb, zbz |
[1,7-9]* | Az 1, 7, 8 vagy 9 számjegyek nulla vagy többször fordulnak elő | 1, 7, 9, 9777, 111199 |
1{5} | Az 1-es számjegy 5-ször fordul elő | 11111 |
[1,2,a,b]{2} | Az 1, 2, 'a' vagy 'b' szimbólumok kétszer fordulnak elő | 11, 12, 1a, ab, 2b, bb, 22 |
[a,0]{2,3} | Az „a” vagy a 0 szimbólum kétszer vagy háromszor fordul elő | aa, a0,00,0a, aaa,000, a00,0a0, a0a |
– Még mindig minden tiszta.
"Tényleg? Hmm. Vagy nagyon jól elmagyaráztam mindent, vagy túl gyors vagy. Nos, mindegy, ez jó nekünk."
– Íme néhány új meglátás az ön számára.
"Mivel a reguláris kifejezéseket gyakran használják részkarakterláncok keresésére, hozzáadhatunk további két karaktert (^ és $) a mintáinkhoz."
"^ azt jelenti, hogy az alkarakterláncnak tartalmaznia kell a karakterlánc elejét."
"$ azt jelenti, hogy az alkarakterláncnak tartalmaznia kell a karakterlánc végét."
"Íme néhány példa:"
Minta | A mintának megfelelő karakterlánc és részkarakterlánc |
---|---|
a{3} | aaa a aaa a aaa |
a{3}$ | aaa a aaa a aaa |
^a{3} | aaa a aaa a aaa |
^a{3}$ | aaa a aaa a aaa |
– És még egy fontos szempont.
"A reguláris kifejezésekben a következő karakterek különleges jelentéssel bírnak: [ ] \ / ^ $ . | ? * + ( ) { }. Ezeket vezérlőkaraktereknek hívják. Tehát nem használhatod egyszerűen karakterláncokban."
"A Java kódhoz hasonlóan ezeket meg kell szökni. "És a Java kódhoz hasonlóan ehhez a '\' karaktert használják."
"Ha egy karakterláncot akarunk leírni, amely három "?" karaktert, nem írhatunk "?{3}" karaktert, mert "?" egy vezérlőkarakter. Ezt a következőképpen kell tennünk: \?{3}. Ha '\' karaktert akarunk használni, akkor '\\' karaktert kell írnunk."
"Ok értem."
"És most itt van még egy érdekes apróság. Java kóddal rendelkező fájlokban a "\" karaktert is meg kell szüntetni a karakterláncokban, mivel ez egy vezérlőkarakter."
"Természetesen."
"Tehát, ha egy Java reguláris kifejezést próbál definiálni egy karakterláncban, akkor kétszer ki kell lépnie a "\" karakterből."
"Íme egy példa:"
Olyan maszkot szeretnék, ami egyezik a "c:\anything" kifejezéssel |
Elméletileg a reguláris kifejezésnek így kell kinéznie: egy 'c' karakter, kettőspont, fordított perjel, pont és csillag (tetszőleges számú karakter jelölésére). Szóközöket adtam hozzá az olvashatóság javítása érdekében: c : \ .* De a "\" és a "." meg kell szökni, így a reguláris kifejezés így fog kinézni: c : \\ \. * Vagy szóköz nélkül c: \\ \. * |
"A reguláris kifejezésünkben három fordított perjelnek kell lennie. Ez azt jelenti, hogy a Java fájlban a reguláris kifejezés így fog kinézni:" String regexp = "c: \\\\ \\. *"; |
"Hűha! Hú. Most már tudom."
"És ha úgy döntesz, hogy mélyebben beleásod magad, itt van néhány jó link:"
GO TO FULL VERSION