Geliň, yzygiderli aňlatmalary öwrenmegi dowam etdireliň. Bu makalada öňünden kesgitlenen nyşan synplaryna we mukdaryna (yzygiderliligi gözlemek) serederis.
Öňünden kesgitlenen nyşan synplary
Synp API-Pattern
de köplenç ulanylýan yzygiderli aňlatmalara amatly gysga ýollary hödürleýän öňünden kesgitlenen nyşan synplary bar. Bu tablisada çep sütündäki gurluşlar sag sütündäki aňlatmalaryň stenografiki şekillendirilişidir. Mysal üçin, \d
san (0-9) diýmek, \w
islendik baş harp ýa-da kiçi harp, aşaky ýa-da san diýmekdir. Mümkin boldugyça öňünden kesgitlenen nyşan sapaklaryny ulanyň. Bu, koduňyzy ýalňyşlary okamak we düzeltmek aňsatlaşdyrar. Yzky çyzgydan başlaýan desgalara gaçmak ýa-da goramak diýilýär. \Q
Öňki makalalarda arka nyşanlary ýa-da nyşanlary bolan ýörite nyşanlardan gaçmak we \E
olary yzygiderli nyşan hökmünde ulanmak barada gürleşipdik . Adaty simwollar (göçme manyda) bilen arka çyzgysyny ulanýan bolsaňyz, aňlatmanyň düzülmegi üçin arka çyzgydan gaçmaly bolarsyňyz.
private final String REGEX = "\\d"; // цифра
Bu mysalda \d
yzygiderli aňlatma; programmanyň düzülmegi üçin goşmaça yza gaýtmak zerur. Synag programmamyz konsoldan yzygiderli aňlatmalary okaýar, şonuň üçin goşmaça çyzgy gerek däl. Aşakdaky mysal öňünden kesgitlenen nyşan synplarynyň ulanylyşyny görkezýär: Ilkinji üç mysalda adaty aňlatma diňe " .
" (nokat aýratyn nyşan) bolup, islendik nyşany aňladýar. Şonuň üçin gözleg ähli ýagdaýlarda üstünlikli boldy. Beýleki mysallar, ýokardaky tablisada ara alyp maslahatlaşan manylarymyzy öňünden kesgitlenen nyşanlary ulanýar.
Mukdarlar
Mukdar kesgitleýjiler bir setirde simwolyň ýüze çykýan sanyny kesgitlemäge mümkinçilik berýär. Açgöz, ýalta we gaty açgöz mukdarlaryň işleýşiniň jikme-jikliklerine has içgin seredeliň. Bir seretseň, mukdarlary X ?, X ?? we X? + birmeňzeş işleýär: “X bir gezek bar ýa-da asla ýok.” Aşakda seredip geçjek bu kesgitleýjileriň ýerine ýetirilişinde azajyk tapawutlar bar.Uzynlyk nol
Açgöz bilen başlalyň. Üç dürli yzygiderli aňlatma ýazalyň: ýörite nyşanly “a” harpy ?, * +a-da +. Bu yzygiderli aňlatmalary boş setirde barlasak näme bolýandygyny göreliň: aboveokardaky mysalda gözleg ilkinji iki ýagdaýda üstünlikli boldy, sebäbi a sözleri? we * simwolyň simden ýitmegine rugsat beriň. Şeýle hem, başlangyç we soňky oýun indeksiniň birmeňzeşdigine üns beriň (0). Giriş setiriniň uzynlygy bolmansoň, programma hiç zat tapmaýar :) birinji ýerde. Bu ýagdaýa nol uzynlykdaky oýun diýilýär. Şeýle gabat gelmeler birnäçe ýagdaýda ýüze çykýar: giriş çyzygy boş bolanda, giriş setiriniň başynda, setiriň soňky nyşanyndan soň ýa-da setirdäki nyşanlaryň arasynda. Nol uzynlykdaky oýunlary görmek aňsat: şol bir ýagdaýda başlaýar we gutarýar. Nol uzynlykdaky gabat gelýänleriň ýene käbir mysallaryna seredeliň. Geliň, ýene birnäçe mysal bilen nol uzynlykdaky gabat gelişleri öwreneliň. Geliň, giriş setirini "a" harpyna üýtgedeliň we gyzykly effekti synlalyň: Üç ölçegçiniň hemmesi "a" nyşanyny tapdy, ýöne simwolyň ýoklugyna mümkinçilik berýän ilkinji ikisi, 1-nji pozisiýada nol uzynlyk tapdy. - setiriň soňky harpyndan soň. Bu, sebäbi programma “a” harpyna setir hökmünde seredýär we başga gabat gelýänçä “üstünden” geçýär. Ulanylan mukdara baglylykda programma setiriň soňunda "hiç zat" tapmaz ýa-da tapmaz. Indi giriş setirini "a" bäş harp yzygiderliligine üýtgedeliň: Adaty aňlatma a? setirdäki her harp üçin gabat gelýänini tapýar. A * aňlatmasy iki gabat gelýär: "a" nyşanlaryň yzygiderliligi we 5-nji ýerdäki nol uzynlykdaky gabatlyk. Netijede, a + yzygiderli aňlatma, "hiç zat" tapman, diňe "a" nyşanlarynyň yzygiderliligini tapýar :) Dürli nyşanlary öz içine alýan setir giriş hökmünde berilse näme bolar? Mysal üçin, "ababaaaab": "b" harpy 1, 3 we 8-nji pozisiýalarda we programma bu ýerlerde nol uzynlykdaky gabat gelýänleri tapýar. Yzygiderli aňlatma a? "b" -e üns bermeýär, diňe "a" harpynyň bardygyny (ýa-da ýoklugyny) gözleýär. Eger mukdar "a" ýoklugyna ýol berse, setirdäki "a" -dan başga ähli nyşanlar nol uzynlykdaky oýun hökmünde görkeziler. Berlen uzynlygyň yzygiderliligini tapmak üçin, egri ýaýlaryň uzynlygyny kesgitläň: {3} yzygiderli aňlatma üç "a" simwolyň yzygiderliligini gözleýär. Birinji setirde hiç zat tapylmady, sebäbi setirde a ýeterlik däldi. Ikinjisinde programmanyň tapýan 3 simwoly bar. Üçünji synag hem setiriň başynda bir gabat gelýär. 3-nji belgiden soň hemme zat adaty aňlatmany kanagatlandyrmaýar, aşakdaky kodda ýerine ýetirilýär we birnäçe gabat geler: Iň az yzygiderliligi kesgitlemek üçin ulanyň:Enter your regex: a{3,}
Enter input string to search: aaaaaaaaa
I found the text "aaaaaaaaa" starting at index 0 and ending at index 9.
Bu mysalda, programma diňe bir gabat gelýär, sebäbi setir (3) "a" nyşanlaryň iň az yzygiderlilik talaplaryna laýyk gelýär. Ahyrynda iň ýokary yzygiderliligi kesgitlemek: Bu mysalda ilkinji oýun altynjy nyşan bilen tamamlandy. Ikinji oýunda altynjy oýundan soň simwollar bar, sebäbi iň az uzynlyk talaplaryny kanagatlandyrýarlar. Setir bir nyşan gysga bolsa, ikinji gabat gelmezdi.
GO TO FULL VERSION