JavaRush /Java Blogu /Random-AZ /RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım. 1-...
Artur
Səviyyə
Tallinn

RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım. 1-ci hissə

Qrupda dərc edilmişdir
Bu məqalənin orijinalı buradadır . Yəqin ki, çox nəzəriyyə deyilən bir şey yoxdur və məqalənin sonunda regex haqqında daha ətraflı materiala bir neçə keçid verəcəyəm. Ancaq mənə elə gəldi ki, müntəzəm ifadələr kimi bir mövzunu araşdırmağa başlamaq, yol boyu kiçik tapşırıqları yerinə yetirməklə nəinki sıxışdırmaq, həm də dərhal bilikləri möhkəmləndirmək imkanı olsaydı, daha maraqlı olardı. RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım.  1-1 hissəGəlin başlayaq. Adətən proqramlaşdırmada müntəzəm ifadələrdən (“RegEx” və ya sadəcə “regex”) istifadə etməyin əleyhdarları Ceymi Zavinskiyə aid edilən aşağıdakı sitatı gətirirlər: “Bəzi insanlar problemlə qarşılaşanda düşünürlər ki, “Bilirəm, mən müntəzəm ifadələrdən istifadə edəcəyəm”. .'" İndi onların iki problemi var". Əslində, müntəzəm ifadələrdən istifadə hələ yaxşı və ya pis fikir deyil. Bu isə özlüyündə problemlər əlavə etməyəcək və onların heç birini həll etməyəcək. Bu sadəcə bir vasitədir. Onu necə istifadə etdiyiniz (doğru və ya yanlış) hansı nəticələri görəcəyinizi müəyyənləşdirir. Məsələn, HTML analizatoru yaratmaq üçün regexdən istifadə etməyə çalışsanız, çox güman ki, ağrı hiss edəcəksiniz . Ancaq sadəcə olaraq, məsələn, bəzi sətirlərdən vaxt ştamplarını çıxarmaq istəyirsinizsə, yəqin ki, yaxşı olacaqsınız. Normal ifadələri mənimsəməyinizi asanlaşdırmaq üçün mən bu dərsi bir araya gətirdim ki, bu dərs normal ifadələri sıfırdan cəmi iyirmi qısa addımda mənimsəməyə kömək edəcək. Bu dərslik əsasən müntəzəm ifadələrin əsas anlayışlarına diqqət yetirir və yalnız zəruri hallarda daha təkmil mövzuları araşdırır.

Addım 1: Niyə müntəzəm ifadələrdən istifadə edin

RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım.  1-2 hissəMüəyyən edilmiş nümunələrdən (naxışlardan) istifadə edərək mətndə uyğunluqları axtarmaq üçün müntəzəm ifadələrdən istifadə olunur. Regexdən istifadə etməklə biz mətndən sözləri , həmçinin fərdi hərfi və meta simvolları və müəyyən meyarlara cavab verən ardıcıllıqları asanlıqla və sadə şəkildə çıxara bilərik . Vikipediya onlar haqqında bizə deyir : Daimi ifadələr metasimvolların (wildcard simvolları) istifadəsinə əsaslanan mətndə alt sətirləri axtarmaq və manipulyasiya etmək üçün rəsmi dildir. Axtarış üçün simvollardan və metasimvollardan ibarət və axtarış qaydasını müəyyən edən nümunə sətirdən (İngilis naxışı, rus dilində tez-tez “şablon”, “maska” adlanır) istifadə olunur. Mətni manipulyasiya etmək üçün əvəzedici sətir əlavə olaraq müəyyən edilir ki, bu da xüsusi simvollardan ibarət ola bilər. Nümunə dogbu cümlədəki söz qədər sadə ola bilər:
Sürətli qəhvəyi tülkü tənbəl itin üstündən tullanır.
Bu müntəzəm ifadə belə görünür:
it
...Kifayət qədər asandır, elə deyilmi? Nümunə həm də hərfi ehtiva edən hər hansı bir söz ola bilər o. Belə bir nümunə tapmaq üçün müntəzəm ifadə belə görünə bilər:
\Heyrət ! Vay *
( Bu müntəzəm ifadəni burada sınaya bilərsiniz .) Siz görəcəksiniz ki, “uyğunluq” tələbləri mürəkkəbləşdikcə, nizamlı ifadə də mürəkkəbləşir. Simvol qruplarını təyin etmək və təkrarlanan nümunələri uyğunlaşdırmaq üçün əlavə qeyd formaları var, bunları aşağıda izah edəcəyəm. Ancaq hansısa mətndəki naxışa uyğunluq tapan kimi onunla nə edə bilərik? Müasir müntəzəm ifadə mühərrikləri sizə daxil olan mətndən simvolları və ya simvol ardıcıllığını (alt sətirləri) çıxarmağa və ya onları silməyə və ya başqa mətnlə əvəz etməyə imkan verir. Ümumiyyətlə, müntəzəm ifadələr mətni təhlil etmək və manipulyasiya etmək üçün istifadə olunur. Biz, məsələn, IP ünvanlarına bənzəyən alt sətirləri çıxara və sonra onları yoxlamağa cəhd edə bilərik. Və ya adları və e-poçt ünvanlarını çıxarıb verilənlər bazasında saxlaya bilərik. Yaxud e-poçtlarda həssas məlumatları (pasport nömrələri və ya telefon nömrələri kimi) tapmaq üçün müntəzəm ifadələrdən istifadə edin və istifadəçini özlərini riskə ata biləcəyi barədə xəbərdar edin. Regex həqiqətən öyrənilməsi asan, lakin mənimsənilməsi çətin olan çox yönlü bir vasitədir: “Musiqi parçasını yaxşı ifa etmək və musiqi yaratmaq arasında fərq olduğu kimi, müntəzəm ifadələri bilməklə onları anlamaq arasında da fərq var.” - Jeffrey E. F. Friedl, Müntəzəm ifadələrin mənimsənilməsi

Addım 2: Kvadrat Mötərizələr[]

Anlaşılması asan olan ən sadə müntəzəm ifadələr sadə ifadə nümunəsi ilə hədəf sətir arasında simvol-xarakter uyğunluğu axtaranlardır. Məsələn, bir pişik tapmağa çalışaq: RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım.  1-3 hissə
model: pişik
sim: Maşının altına qaçarkən pişik kəsildi.
uyğunluqlar:      ^^^
( Praktikada necə işləyir - buraya baxın ) NB! Bütün həllər burada yalnız mümkün həllər kimi təqdim olunur. Normal ifadələrdə, ümumiyyətlə proqramlaşdırmada olduğu kimi, eyni məsələləri müxtəlif üsullarla həll edə bilərsiniz. Bununla belə, ciddi xarakter-xarakter müqayisəsinə əlavə olaraq, kvadrat mötərizələrdən istifadə edərək alternativ uyğunluqları da təyin edə bilərik:
nümunə: ca[rt]
sim: Maşının altına qaçarkən pişik kəsildi.
uyğunluqlar:      ^^^ ^^^
( Necə işləyir ) Kvadrat mötərizələrin açılması və bağlanması adi ifadə mühərrikinə onun göstərilən simvollardan hər hansı birinə, ancaq birinə uyğun gəlməsini bildirir. Yuxarıdakı müntəzəm ifadə, məsələn, bütün sözü tapmayacaq cart, ancaq onun yalnız bir hissəsini tapacaq:
nümunə: ca[rt]
sim: arabanın altına qaçanda pişik kəsildi.
uyğunluqlar:      ^^^ ^^^
( Necə işləyir ) Kvadrat mötərizələrdən istifadə etdiyiniz zaman siz müntəzəm ifadə mühərrikinə mötərizədə olan simvollardan yalnız birinə uyğun gəlməsini bildirirsiniz. Mühərrik personajı c, sonra xarakteri tapır a, lakin növbəti simvol deyilsə rvə ya deyilsə t, bu tam uyğunluq deyil. Əgər ca, sonra isə ya r, ya da t, dayanır. O, daha çox simvolu uyğunlaşdırmağa çalışmayacaq, çünki kvadrat mötərizədə olan simvollardan yalnız birinin uyğunlaşdırılması lazım olduğunu göstərir. Tapdıqda növbəti sözdə catapır və ardıcıllığa uyğunluq tapdığı üçün dayanır . rcartcar

Təlimin məqsədləri:

Yerli dialektdə tərcümə olunmayan söz oyunlarından ibarət bu parçadakı had10 nümunənin hamısına uyğun gələn müntəzəm ifadə yazın :Had
naxış:
string: Cim, Billin "had" olduğu yerdə , "had had" . "Olsaydı" düz idi.
matçlar:                  ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
( Mümkün həllə burada baxın ) Aşağıdakı cümlədəki bütün heyvan adları haqqında nə demək olar?
naxış:
sim: yarasa, pişik  siçovul bara girdi...
uyğunluqlar:    ^^^ ^^^ ^^^
( Mümkün həll ) Və ya daha sadə: sözləri tapın barvə ya bat:
naxış:
sim: yarasa, pişik  siçovul bara girdi...
uyğunluqlar:    ^^^ ^^^
( Mümkün həll ) İndi biz artıq az-çox mürəkkəb nizamlı ifadələri necə yazmağı öyrənmişik və yalnız 2-ci addımdayıq! Davam edək!

Addım 3: Qaçış ardıcıllığı

RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım.  1-4 hissəƏvvəlki addımda kvadrat mötərizələr []və onların regex mühərrikindən istifadə edərək alternativ uyğunluqlar tapmağımıza necə kömək etdiyini öyrəndik. Bəs açıq və qapalı kvadrat mötərizələr şəklində uyğunluq tapmaq istəsək nə etməli []? Sözün simvol-xarakter uyğunluğunu tapmaq istədikdə catregex mühərrikini bu simvol ardıcıllığı ilə təmin etdik ( cat). []Eyni şəkildə kvadrat mötərizələri tapmağa çalışaq :
model: [] 
sətir: Siz regexdən istifadə edərək [] ilə uyğunlaşa bilməzsiniz! Buna peşman olacaqsınız!
uyğun gəlir: 
( Gəlin nə baş verdiyini görək ) Ancaq nəsə işləmədi... Bunun səbəbi kvadrat mötərizə simvollarının adətən başqa nəyisə göstərmək üçün istifadə edilən xüsusi regex mühərrik simvolları kimi çıxış etməsidir və onların özləri ilə uyğunlaşmaq üçün hərfi nümunə deyil. 2-ci addımdan xatırladığımız kimi, onlar alternativ uyğunluqlar tapmaq üçün istifadə olunur ki, regex mühərriki onların arasında olan hər hansı simvolla uyğunlaşa bilsin. Onların arasına hər hansı simvol qoymasanız, bu, xətaya səbəb ola bilər. Bu xüsusi simvolları uyğunlaşdırmaq üçün onlardan əvvəl tərs kəsik işarəsi qoyaraq onlardan qaçmalıyıq \. Arxa xətt (və ya tərs kəsik) regex mühərrikinə onu meta xarakter kimi istifadə etmək əvəzinə, sözün həqiqi mənasında növbəti simvolu axtarmağı əmr edən başqa bir xüsusi simvoldur. Regex mühərriki yalnız simvolları axtaracaq [hər ikisindən əvvəl əks kəsik işarəsi ]varsa :
nümunə: \[\]
string: Regex istifadə edərək [] ilə uyğunlaşa bilməzsiniz! Buna peşman olacaqsınız!
uyğunluqlar:                  ^^ 
( Gəlin bu dəfə nə baş verdiyini görək ) Yaxşı, əks kəsik xəttinin özünü tapmaq istəsək necə olar? Cavab sadədir. Əks kəsik işarəsi də xüsusi simvol olduğundan \, ondan da qaçmaq lazımdır. Necə? Tərs kəsiş!
nümunə: \\
sətir: C:\Users\Tanja\Pictures\Dogs
uyğun gəlir:    ^ ^ ^ ^
( Təcrübədə eyni nümunə ) Yalnız xüsusi simvollardan əvvəl tərs kəsik işarəsi olmalıdır. Bütün digər simvollar standart olaraq hərfi mənada şərh olunur. Məsələn, adi ifadə tyalnız tkiçik hərflərə hərfi uyğun gəlir:
naxış: t
sətir: tttt
uyğun gəlir: ^ ^ ^ ^
( Nümunə ) Lakin bu ardıcıllıq \tfərqli işləyir. Bu, nişan simvolunu axtarmaq üçün şablondur:
naxış: \t
sətir: tttt
uyğun gəlir:   ^ ^ ^
( Nümunə\n ) Bəzi ümumi qaçış ardıcıllığına (UNIX-stil sətir fasilələri) və \r(Windows-stil xətt fasilələrində istifadə olunur \r\n) daxildir . \r"karetanın qaytarılması" simvoludur və hər ikisi teletayp maşınlarının hələ geniş istifadə olunduğu zaman ASCII standartı ilə birlikdə müəyyən edilmiş\n "xətt axını" simvoludur . Digər ümumi qaçış ardıcıllığı daha sonra bu təlimatda əhatə olunacaq.

Bu vaxt gəlin materialı bir neçə sadə tapmaca ilə birləşdirək:

Tapmaq üçün müntəzəm ifadə yazmağa çalışın... müntəzəm ifadə ;) ​​Nəticə belə olmalıdır:
naxış:
string: ...bu regex ` \[\] ` regex ilə uyğunlaşdırılsın?
uyğunluqlar:                       ^^^^	
( Həll ) Siz bacardınızmı? Əla! İndi bu kimi qaçış ardıcıllıqlarını axtarmaq üçün regex yaratmağa çalışın:
naxış:
sətir: ` \r `, ` \t ` və ` \n ` hamısı regex qaçış ardıcıllığıdır.
uyğunluqlar:   ^^ ^^ ^^
( Həll )

Addım 4: nöqtədən istifadə edərək "hər hansı" simvolu axtarın.

RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım.  1-5 hissəƏvvəlki addımda gördüyümüz qaçış ardıcıllığına uyğun həlləri yazarkən, ola bilsin ki, "Mən tərs kəsik işarəsini və ondan sonra gələn hər hansı digər simvolu uyğunlaşdıra bilərəmmi?"... Əlbəttə edə bilərsiniz! Hər hansı bir simvolla (demək olar ki) uyğunlaşmaq üçün istifadə olunan başqa bir xüsusi simvol var - nöqtə (nöqtə) simvolu. Budur nə edir:
naxış: .
string: Bağışlayın, Dave. Qorxuram ki, bunu edə bilməyəcəm.
matçlar: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^	
( Nümunə ) Yalnız qaçış ardıcıllığına bənzəyən nümunələri uyğunlaşdırmaq istəyirsinizsə, belə bir şey edə bilərsiniz:
nümunə: \\. 
string: Salam Walmart mənim nəvəmdir, adı " \n \r \t "dir.
uyğunluqlar:                                              ^^ ^^ ^^	
( Nümunə ) Və bütün xüsusi simvollarda olduğu kimi, hərfi uyğunlaşdırmaq istəyirsinizsə ., ondan əvvəl bir simvol qoymalısınız \:
nümunə: \. 
simli: Müharibə Sülhdür . Azadlıq köləlikdir . Cahillik Gücdür . 
uyğun gəlir:             ^ ^ ^
( Nümunə )

Addım 5: Xarakter Aralığı

RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım.  1-6 hissəƏgər heç bir simvola ehtiyacınız yoxdursa, ancaq mətndə yalnız hərfləri tapmaq istəsəniz nə etməli? Yoxsa rəqəmlər? Yoxsa saitlər? Xarakter sinifləri və onların diapazonları üzrə axtarış bizə buna nail olmağa imkan verəcək.
` \n `, ` \r ` və ` \t ` boşluq simvollarıdır , ` \. `, ` \\ ` və ` \[ ` deyil .	
Simvollar mətndə görünən işarə yaratmırsa, "boşluq" olur . Boşluq " " boşluq, sətir sonu və ya nişandır. Tutaq ki, biz yuxarıdakı keçiddə yalnız boşluq simvollarını təmsil edən qaçış ardıcıllıqlarını tapmaq istəyirik, lakin digər qaçış ardıcıllıqlarını deyil \n. Bunu necə edə bilərdik? \r\t
model: \\[nrt] 
sətir: ` \n `, ` \r ` və ` \t ` boşluq simvollarıdır , ` \. `, ` \\ ` və ` \[ ` deyil .
uyğunluqlar:   ^^ ^^ ^^	
( Nümunə ) Bu işləyir, lakin çox zərif bir həll deyil. Bəs sonradan "forma axını" simvolu üçün qaçış ardıcıllığına uyğun gəlməli olsaq, necə \f? (Bu simvol mətndə səhifə fasilələrini göstərmək üçün istifadə olunur.)
model: \\[nrt] 
sətir: ` \n `, ` \r `, ` \t ` və ` \f ` boşluq simvollarıdır , ` \. `, ` \\ ` və ` \[ ` deyil .
uyğunluqlar:   ^^ ^^ ^^	
( İşləməyən həll ) Bu yanaşma ilə uyğunlaşdırmaq istədiyimiz hər kiçik hərfi kvadrat mötərizədə ayrıca sadalamalıyıq. Bunu etmənin daha asan yolu hər hansı kiçik hərflə uyğunlaşdırmaq üçün simvol diapazonlarından istifadə etməkdir:
model: \\[az] 
sətir: ` \n `, ` \r `, ` \t ` və ` \f ` boşluq simvollarıdır , ` \. `, ` \\ ` və ` \[ ` deyil .
uyğunluqlar:   ^^ ^^ ^^ ^^	
( Və bu artıq işləyir ) Yuxarıdakı nümunəni nəzərə alaraq simvol diapazonları gözlədiyiniz kimi işləyir. Uyğunlaşdırmaq istədiyiniz ilk və son hərflərin ətrafına kvadrat mötərizələr qoyun, aralarında defis qoyun. Məsələn, əgər siz yalnız tərs kəsişmə "dəstləri" \və -dən bir hərf atapmaq istəyirsinizsə m, aşağıdakıları edə bilərsiniz:
model: \\[am] 
sətir: ` \n `, ` \r `, ` \t ` və ` \f ` boşluq simvollarıdır , ` \. `, ` \\ ` və ` \[ ` deyil .
uyğunluqlar:                         ^^	
( Nümunə ) Əgər siz bir neçə diapazonu uyğunlaşdırmaq istəyirsinizsə, sadəcə onları kvadrat mötərizələr arasında uçdan uca yerləşdirin:
model: \\[a-gq-z] 
sətir: ` \n `, ` \r `, ` \t ` və ` \f ` boşluq simvollarıdır , ` \. `, ` \\ ` və ` \[ ` deyil .
uyğunluqlar:         ^^ ^^ ^^	
( Misal ) Digər ümumi simvol diapazonlarına aşağıdakılar daxildir: A-Z0-9

Onları praktikada sınayaq və bir neçə problemi həll edək:

Onaltılıq rəqəmlər həm rəqəmlərdən 0-9, həm də hərflərdən ibarət ola bilər A-F. Rəngləri təyin etmək üçün istifadə edildikdə, onaltılıq kodlar maksimum üç simvoldan ibarət ola bilər. Aşağıdakı siyahıda etibarlı onaltılıq kodları tapmaq üçün müntəzəm ifadə yaradın:
naxış:
sətir: 1H8 4E2 8FF 0P1 T8B 776 42B G12
uyğunluqlar:      ^^^ ^^^ ^^^ ^^^	
( Həlly ) Simvol diapazonlarından istifadə edərək, aşağıdakı cümlədə yalnız kiçik hərf samitləri (saitləri deyil, o cümlədən) seçəcək müntəzəm ifadə yaradın :
naxış:sim 
: T h e w a lls i m a ll a r e t o t a lly , t o t a lly t a ll . 
uyğunluqlar:   ^ ^ ^^^ ^ ^^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^	
( Həll )

Addım 6: "deyil", karet, sirkumfleks, karet... simvolu^

RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım.  1-7 hissəHəqiqətən, bu simvolun 9000-dən çox adı var :) Ancaq sadəlik üçün bəlkə də "yox"a diqqət yetirək. Son problemin həlli bir az uzundur. "Saitlərdən başqa bütün əlifbanı əldə et" demək üçün 17 simvol lazım idi. Təbii ki, bunun daha asan yolu var. "Yox" işarəsi nümunədə göstərilənlərə uyğun gəlməməli^ olan simvolları və simvol diapazonlarını təyin etməyə imkan verir . Yuxarıdakı sonuncu problemin daha sadə həlli saitləri təmsil etməyən simvolları tapmaqdır:
naxış: [^aeiou ] simli 
:   The w a lls i m a ll a r e t a lly , t o t a lly t a ll . 
uyğunluqlar: ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 	
( Nümunə^ ) Kvadrat mötərizədə ən solda olan simvol kimi "deyil" işarəsi []normal ifadə mühərrikinə kvadrat mötərizədə olmayan bir (hər hansı) simvolla uyğunlaşmağı bildirir. Bu o deməkdir ki, yuxarıdakı müntəzəm ifadə cümlənin əvvəlindəki bütün boşluqlara, nöqtələrə ., vergüllərə ,və baş hərflərə uyğun gəlir. TOnları istisna etmək üçün onları kvadrat mötərizədə də yerləşdirə bilərik:
naxış: [^aeiou .,T] simli  
: T h e w a lls i n th e m a ll a r e t o t t o t t l ı , t o t a lly t a ll . 
uyğunluqlar:   ^ ^ ^^^ ^ ^^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^	
( Nümunə ) Qeydki, bu halda, əvvəllər kvadrat mötərizədən istifadə etmədən onu axtardığımız zaman etdiyimiz kimi, tərs kəsişmə ilə nöqtədən qaçmağa ehtiyac yoxdur. Kvadrat mötərizədə bir çox xüsusi simvol, o cümlədən açıq [- lakin bağlanan deyil - ]mötərizə simvolu (niyə olduğunu təxmin edə bilərsinizmi?) Əks kəsik işarəsi \də hərfi mənada şərh edilmir. Kvadrat mötərizələrdən istifadə edərək hərfi tərs kəsişmə ilə uyğunlaşdırmaq istəyirsinizsə \, ondan əvvəl aşağıdakı əks kəsik işarəsi qoyaraq ondan qaçmalısınız \\. Bu davranış boşluq simvollarını uyğunlaşdırmaq üçün kvadrat mötərizədə də yerləşdirmək üçün nəzərdə tutulmuşdur:
nümunə: [\t]
sətir: tttt
uyğun gəlir:   ^ ^ ^
( Nümunə ) "deyil" işarəsi ^diapazonlarla da istifadə edilə bilər. aYalnız , b, c, və x, simvollarını çəkmək istəsəm belə bir şey edə bilərdim: yz
naxış: [abcxyz] 
sətir:   abc defghijklmnopqrstuvw xyz 
uyğunluqları: ^^^ ^^^
( Nümunə ) ...və ya, və arasında olmayan hər hansı simvolu tapmaq istədiyimi qeyd edə bilərəm d:w
naxış: [^dw] 
sətir:   abc defghijklmnopqrstuvw xyz 
uyğunluqları: ^^^ ^^^
( Nümunə ) Lakin,ehtiyatlı ol"yox" ilə ^. Düşünmək asandır "yaxşı, mən qeyd etdim , ona görə də -dan sonra [^ b-f]kiçik hərf və ya başqa bir şey almalıyam . Bu belə deyil. Bu regex hərflər, rəqəmlər, durğu işarələri və boşluqlar daxil olmaqla, həmin diapazonda olmayan istənilən simvola uyğun olacaq. af
naxış: [^dw] 
sətir:   abc defg h . i , j - klmnopqrstuvw xyz 
uyğunluqları: ^^^ ^ ^ ^ ^ ^^^
( Nümunə )

Səviyyələndirmə tapşırıqları:

^Aşağıdakı və sonu olmayan bütün sözləri uyğunlaşdırmaq üçün kvadrat mötərizədə "deyil" işarəsindən istifadə edin y:
naxış:
string: day dog'hog hay bog bay ray rub 
matches:      ^^^ ^^^ ^^^ ^^^	
( Həlli^ ) 1977 və 1982 (daxil olmaqla) arasındakı bütün illəri tapmaq üçün diapazondan və "yox" işarəsindən istifadə edərək müntəzəm ifadə yazın :
naxış:
sətir: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
matçlar:            ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^
( Həll ) "deyil" işarəsi olmayan bütün simvolları tapmaq üçün müntəzəm ifadə yazın ^:
naxış:
sətir:   abc1 ^ 23*() 
uyğun gəlir: ^^^^ ^^^^^	
( Həll )

Addım 7: Xarakter Sinifləri

Xarakter sinifləri xarakter diapazonundan daha sadədir. Müxtəlif müntəzəm ifadə mühərriklərinin müxtəlif sinifləri mövcuddur, ona görə də mən burada yalnız əsas olanları əhatə edəcəyəm. (Hansı regex versiyasını istifadə etdiyinizi yoxlayın, çünki onlardan daha çox ola bilər - və ya burada göstərilənlərdən fərqli ola bilər.) Simvol sinifləri, demək olar ki, diapazonlar kimi işləyir, lakin siz "başlanğıc" və "son" dəyərlərini təyin edə bilməzsiniz:
Sinif simvollar
\d "nömrələri"[0-9]
\w "söz simvolları"[A-Za-z0-9_]
\s "boşluqlar"[ \t\r\n\f]
"Söz" simvol sinfi \wxüsusilə faydalıdır, çünki bu simvol dəsti tez-tez müxtəlif proqramlaşdırma dillərində etibarlı identifikatorlar (dəyişən adları, funksiya adları və s.) üçün tələb olunur. \wDaha əvvəl gördüyümüz müntəzəm ifadəni sadələşdirmək üçün istifadə edə bilərik :
model: \\[az] 
sətir: ` \n `, ` \r `, ` \t ` və ` \f ` boşluq simvollarıdır , ` \. `, ` \\ ` və ` \[ ` deyil .
uyğunluqlar:   ^^ ^^ ^^ ^^	
İstifadə edərək \wbelə yaza bilərik:
model: \\\w 
sətir: ` \n `, ` \r `, ` \t ` və ` \f ` boşluq simvollarıdır , ` \. `, ` \\ ` və ` \[ ` deyil .
uyğunluqlar:   ^^ ^^ ^^ ^^	
( Nümunə )

Uğur üçün 2 tapşırıq:

Siz və mənim bildiyimiz kimi, Java-da identifikator (dəyişənin adı, sinif, funksiya və s.) yalnız a- zA- hərfi Z, dollar işarəsi $və ya alt xətt ilə başlaya bilər _. ( altını çəkmək, əlbəttə ki, pis üslubdur, lakin tərtibçi onu ötür, tərcüməçinin qeydi ). Qalan simvollar "söz" simvolları olmalıdır \w. Bir və ya bir neçə simvol sinifindən istifadə edərək, aşağıdakı üç simvol ardıcıllığı arasında etibarlı Java identifikatorlarını axtarmaq üçün müntəzəm ifadə yaradın:
naxış:
simli:   __e $12 .x2 foo Bar 3mm
uyğunluqlar: ^^^ ^^^ ^^^ ^^^	
( Həll ) ABŞ Sosial Müdafiə Nömrələri (SSN) XXX-XX-XXXX formatında 9 rəqəmli nömrələrdir, burada hər X istənilən rəqəm ola bilər [0-9]. Bir və ya bir neçə simvol sinifindən istifadə edərək, aşağıdakı siyahıda düzgün formatlanmış SSN-ləri tapmaq üçün müntəzəm ifadə yazın:
naxış:
sətir: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
uyğunluqlar:              ^^^^^^^^^^^
( Həlli ) RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım. 2-ci hissə. Normal ifadələri mənimsəmək üçün 20 qısa addım. Hissə 3. RegEx: Normal ifadələri mənimsəmək üçün 20 qısa addım. 4-cü hissə.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION