JavaRush /Java Blog /Random-TK /RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ä...
Artur
Dereje
Tallinn

RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim. 2-nji bölüm

Toparda çap edildi
RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim. 1- nji bölüm Asyl bu ýerde Soňky bölümde iň ýönekeý sözlemleri özleşdirdik we eýýäm bir zatlar öwrendik. Bu bölümde birneme çylşyrymly dizaýnlary öwreneris, ýöne maňa ynanyň, görünişi ýaly kyn bolmaz. RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  2-nji bölümGeliň, dowam edeliň!

8-nji ädim: Staryldyz *we goşmaça bellik+

RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  2-nji bölümŞu wagta çenli diňe belli bir uzynlykdaky setirlere gabat gelip bildik. Theöne iň soňky meselelerde şu wagta çenli gören belliklerimiz bilen näme edip biljekdigimiziň çägine ýetdik. Mysal üçin, 3 simwolly Java kesgitleýjiler bilen çäklenmän, islendik uzynlyk kesgitleýjilerimiz bolup biler diýip pikir edeliň. Öňki mysalda işlän bolmagy mümkin çözgüt aşakdaky mysalda işlemez:
nagyş: [a-zA-Z _ $] \ w \ w 
setir:   __e $ 12 3 3.2 fo Bar r a23 mm ab x
gabat gelýär: ^^^ ^^^ ^^^ ^^^  
( Mysal ) bellikkesgitleýjiniň ygtybarly, ýöne 3 simwoldan köp bolanda diňe ilkinji üç simwolyň gabat gelýändigini. Haçan-da kesgitleýji dogry, ýöne 3 simwoldan az bolsa, regex asla tapmaýar! Mesele, ýaýly []sözlemler ýaly simwol synplary ýaly bir nyşan bilen gabat gelýär \w. Bu, ýokardaky yzygiderli aňlatmada gabat gelýänleriň takmynan üç simwoldan ybarat bolmalydygyny aňladýar. Şonuň üçin bu biziň umyt edişimiz ýaly işlemeýär. *Specialörite nyşanlar we bu ýerde kömek edip biler +. Bular islendik aňlatmanyň saglygyna şol aňlatma gabat gelmek üçin goşulyp bilýän üýtgeýjilerdir. “Kleene Star” (ýa-da “ýyldyz ýyldyzy”) *öňki belginiň nol gezek goşmak bilen islendik gezek gabat gelmelidigini görkezer. Goşmaça belgi +bir ýa-da birnäçe gezek gözlemelidigiňizi görkezer. Şeýlelik bilen, öňünden aýdylýan söz +hökmanydyr (iň bolmanda bir gezek), öňünden aýdylýan söz *islege bagly bolsa-da, peýda bolanda islendik gezek peýda bolup biler. Indi bu bilim bilen ýokardaky yzygiderli aňlatmany düzedip bileris:
nagyş: [a-zA-Z _ $] \ w * 
setir:   __e $ 123 3.2 fo Barr a23mm ab x 
gabat gelýär: ^^^ ^^^^ ^^ ^^^^ ^^^^^ ^^ ^ 
( Mysal ) Indi islendik uzynlygyň dogry kesgitleýjilerine gabat gelýäris! Bingo! +Usedöne ulansak näme bolardy *?
nagyş: [a-zA-Z _ $] \ w + 
setir:   __e $ 123 3.2 fo Barr a23mm ab x
gabat gelýär: ^^^ ^^^^ ^^ ^^^^ ^^^^^ ^^ 
( Mysal ) Soňky oýny sypdyrdyk , х. Munuň sebäbi +iň bolmanda bir simwolyň gabat gelmegini talap edýär, ýöne []öňdäki baş harplar \w+eýýäm "iýip" bolansoň x, başga nyşan ýok, şonuň üçin oýun şowsuz bolýar. Haçan ulanyp bileris +? Iň azyndan bir gabat gelmeli bolanymyzda, berlen aňlatmanyň näçe gezek gabat gelmegi möhüm däl. Mysal üçin, onluk nokady öz içine alýan sanlary tapmak islesek:
nagyş: \ d * \. \ d + 
setir:   0.011 .2 42 2.0 3.33 4.000 5 6 7.89012 
gabat gelýär: ^^^^^ ^^ ^^^ ^^^^^^^^  
( Mysal ) belliksanlary onluk nokadyň çep tarapyna goşmak bilen 0.011 we .2 ikisini hem tapyp bildik. \.Munuň üçin takmynan bir onluk nokady we onluk nokadyň sag tarapynda iň bolmanda bir san bilen gabat gelmeli bolduk \d+. Aboveokardaky yzygiderli aňlatma ýaly sanlara gabat gelmez 3., sebäbi gabat gelmek üçin onluk nokadyň sag tarapynda azyndan bir san gerek.

Hemişe bolşy ýaly, ýönekeý birnäçe meseläni çözeliň:

Iňlis sözleriniň hemmesini aşakdaky bölümden tapyň.
nagyş:
setir: 3 plyus 3 alty, 4 plyus üç bolsa 7
gabat gelýär:    ^^^^ ^^ ^^^ ^^^ ^^^^ ^^^^^ ^^ 
( Çözgüt ) Aşakdaky sanawdan ähli faýl ölçeg nyşanlaryny tapyň. Faýl ululyklary, ondan soň KBýa - MBda : GBTB
nagyş:
setir:   11TB 13 14.4MB 22HB 9.9GB TB 0KB 
gabat gelýär: ^^^^ ^^^^^^ ^^^^^ ^^^  
( Çözgüt )

9-njy ädim: "islege bagly" sorag belgisi?

RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  2-nji bölümSoňky meseläni çözmek üçin eýýäm regex ýazdyňyzmy? Işledimi? Indi şu ýerde ulanyp görüň:
nagyş:
setir: 1..3KB 5 ... GB ..6TB
gabat gelýär:  
Elbetde, bu bellikleriň hiç biri-de dogry faýl ölçegi däl, şonuň üçin gowy yzygiderli aňlatma olaryň ikisine-de laýyk gelmeli däldir. Iň soňky meseläni çözmek üçin ýazan çözgütim, iň bolmanda bölekleýin hemmesine gabat gelýär:
nagyş: \ d + \. * \ d * [KMGT] B 
setir:   1..3KB  5 ... GB .. 6TB 
gabat gelýär: ^^^^^^ ^^^^^^ ^^^ 
( Mysal ) Onda näme problema bar? Aslynda, diňe bir onluk nokady tapmaly, eger bar bolsa. Itöne nol ýaly islendik *sanly oýunlara rugsat berýär. Diňe nol gezek ýa-da bir gezek gabat gelmegiň usuly barmy? Onceöne bir gezekden köp dälmi? Elbetde bar. "islege bagly" ?nula ýa-da öňki simwollaryň birine gabat gelýän üýtgediji, ýöne indi ýok:
nagyş: \ d + \.? \ d * [KMGT] B 
setir: 1 .. 3KB 5 ... GB .. 6TB 
gabat gelýär:     ^^^ ^^^ 
( Mysal ) Bu ýerde çözgüde has ýakyn, ýöne bu bize zerur zat däl. Muny nädip biraz soňrak düzedip boljakdygyny göreris.

Häzirki wagtda, bu meseläni çözeliň:

Käbir programmirleme dillerinde (meselem, Java) käbir bitewi we ýüzýän nokat (nokat) sanlary yzygiderli int / goşa däl-de, uzyn / ýüzýän (degişlilikde) hasaplamalydygyny görkezmek üçin l/ Lwe f/ yzarlap biler. FAşakdaky setirde ähli dogry "uzyn" sanlary tapyň:
nagyş:
setir:   uzynlygy 13L 2l 19 L lL 0 
gabat gelýär: ^^^ ^^ ^^ ^ 
( Çözgüt )

10-njy ädim: "ýa-da" gol|

RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim.  2-nji bölüm8-nji ädimde ýüzýän nokatlaryň dürli görnüşlerini tapmakda birneme kynçylyk çekdik:
nagyş: \ d * \. \ d + 
setir:   0.011 .2 42 2.0 3.33 4.000 5 6 7.89012 
gabat gelýär: ^^^^^ ^^ ^^^ ^^^^^^^^  
Aboveokardaky nagyş onluk nokat bilen sanlara gabat gelýär we onluk nokadyň sag tarapynda iň azyndan bir san. Alsoöne biz ýaly setirlere gabat gelmek islesek näme etmeli 0.? (Onluk nokadyň sag tarapynda san ýok.) Munuň ýaly yzygiderli aňlatma ýazyp bilerdik:
nagyş: \ d * \. \ d * 
setir:   0.011 .2 42 2.0 3.33 4.000 5 6 7.89012 0 .. 
gabat gelýär: ^^^^^ ^^ ^^^ ^^^^ ^^^^^ 
( Mysal ) Bu gabat gelýär , ýöne ýokarda görşüňiz ýaly 0.ýekeje nokada-da gabat gelýär . .Aslynda deňeşdirjek bolýan zadymyz iki dürli setir synpy:
  1. onluk nokadyň sag tarapynda azyndan bir sanly sanlar
  2. onluk nokadyň çep tarapynda azyndan bir sanly sanlar
Biri-birimize garaşsyz aşakdaky 2 yzygiderli aňlatmany ýazalyň:
nagyş: \ d * \. \ d + 
setir:   0.011 .2 42 2.0 3.33 4.000 5 6 7.89012 0 ..
gabat gelýär: ^^^^^ ^^ ^^^ ^^^^ ^^^^^  
nagyş: \ d + \. \ d * 
setir:   0.011 .2 42 2.0 3.33 4.000 5 6 7.89012 0 ..
gabat gelýär: ^^^^^ ^^^ ^^^^ ^^^^^ ^^^^^^ 
42Bu ýagdaýlaryň hiç birinde-de aşaky bölekleriň ýa-da 5hereketlendiriji tarapyndan tapylmaýandygyny görýäris . Gerekli netijäni almak üçin bu yzygiderli aňlatmalary birleşdirmek bize zyýan bermez. Muny nädip gazanyp bileris? ""A-da" belgisi, yzygiderli aňlatmada birbada birnäçe gabat gelýän yzygiderliligi kesgitlemäge mümkinçilik berýär. ""A-da" belginiň alternatiw ýeke nyşanlary kesgitlemäge mümkinçilik berşi ýaly , alternatiw köp belgili aňlatmalary hem kesgitläp bileris. Mysal üçin, "it" ýa-da "pişik" tapmak islesek, şuňa meňzeş bir zat ýazyp bilerdik: 6.|[]|
nagyş: \ w \ w \ w 
setir:   Elbetde , it pişikden has gowy haýwan .
gabat gelýär: ^^^^^^^^^ ^^^ ^^^^^^ 
( Mysal ) ... ýöne bu "söz" synpynyň üç belgili yzygiderliligine gabat gelýär. "Öne" it "we" pişik "hatda umumy harplaram ýok, şonuň üçin kwadrat ýaýlar bu ýerde bize kömek etmez. Ine, şu iki söze gabat gelýän we ulanyp boljak iň ýönekeý yzygiderli aňlatma:
nagyş: it | pişigiň 
setiri: Elbetde, it pişikden has gowy haýwan .
gabat gelýär:               ^^^ ^^^ 
( Mysal ) Adaty aňlatma dwigateli ilki bilen yzygiderliligi simwolyň çep tarapyna gabat getirmäge synanyşýar |, ýöne şowsuz bolsa, yzygiderliligi nyşanlaryň sag tarapyna laýyklaşdyrmaga synanyşýar |. Birnäçe simwol |iki alternatiw yzygiderlilige gabat gelip biler:
nagyş: it | pişik | haýwanlaryň setiri 
: Elbetde, it pişikden has gowy haýwan .
gabat gelýär:               ^^^ ^^^ ^^^ 
( Mysal )

Indi bu ädime has gowy düşünmek üçin ýene birnäçe meseläni çözeliň:

|Munuň ýaly netije bermek üçin ýokardaky onluk yzygiderli aňlatmany düzetmek üçin belgini ulanyň :
nagyş:
setir:   0.011 .2 42 2.0 3.33 4.000 5 6 7.89012 0 ..
gabat gelýär: ^^^^^ ^^ ^^^ ^^^^ ^^^^^ 
. _ _ |_ ?_ has çylşyrymly, hawa;))
nagyş:
setir:   42L 12 x 3.4f 6l 3.3 0F LF .2F 0. 
gabat gelýär: ^^^ ^^ ^^^^ ^^ ^^^ ^^ ^^^ ^^  
( Çözgüt ) yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim. 3-nji bölüm RegEx: yzygiderli aňlatmalary özleşdirmek üçin 20 gysga ädim. 4-nji bölüm
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION