Reguláris kifejezések (példákkal) - 1

"É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
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:"

Lecke a Wikipédiáról