JavaRush /Java Blog /Random-TK /Java-da yzygiderli aňlatmalaryň esaslary. 3-nji bölüm
articles
Dereje

Java-da yzygiderli aňlatmalaryň esaslary. 3-nji bölüm

Toparda çap edildi
Geliň, yzygiderli aňlatmalary öwrenmegi dowam etdireliň. Bu makalada öňünden kesgitlenen nyşan synplaryna we mukdaryna (yzygiderliligi gözlemek) serederis. Java-da yzygiderli aňlatmalaryň esaslary.  3-nji bölüm

Öňünden kesgitlenen nyşan synplary

Synp API- Patternde köplenç ulanylýan yzygiderli aňlatmalara amatly gysga ýollary hödürleýän öňünden kesgitlenen nyşan synplary bar. Java-da yzygiderli aňlatmalaryň esaslary.  3-nji bölümBu tablisada çep sütündäki gurluşlar sag sütündäki aňlatmalaryň stenografiki şekillendirilişidir. Mysal üçin, \dsan (0-9) diýmek, \wislendik 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 \Eolary 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 \dyzygiderli 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: Основы регулярных выражений в Java. Часть 3 - 3Основы регулярных выражений в Java. Часть 3 - 4Ilkinji üç 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

Основы регулярных выражений в Java. Часть 3 - 4Mukdar 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ň: Основы регулярных выражений в Java. Часть 3 - 5aboveokardaky 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ň: Основы регулярных выражений в Java. Часть 3 - 6Üç ö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ň: Основы регулярных выражений в Java. Часть 3 - 7Adaty 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": Основы регулярных выражений в Java. Часть 3 - 8"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äň: Основы регулярных выражений в Java. Часть 3 - 9{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: Основы регулярных выражений в Java. Часть 3 - 10Iň 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: Основы регулярных выражений в Java. Часть 3 - 11Bu 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.

Nyşan toparlaryny we mukdarlary bilen synplary ulanmak

Şu wagta çenli şol bir nyşanlary öz içine alýan setirlerde mukdar ölçeglerini synagdan geçirdik. Mukdarlar diňe bir nyşan üçin ulanylýar, şonuň üçin yzygiderli "abc +" aňlatmasy "ab" we "c" setirlerine bir ýa-da birnäçe gezek gabat gelýär. "Abc" bir ýa-da birnäçe gezek many bermez. Quantöne kesgitleýjiler [abc] + (a ýa-da b ýa-da c, bir ýa-da birnäçe gezek) ýa-da (abc) + (“abc” bir ýa-da birnäçe gezek) ýaly toparlar we nyşan synplary bilen bilelikde ulanylyp bilner. Geliň, simwollar toparyny (it) üç gezek setirde tapalyň: Основы регулярных выражений в Java. Часть 3 - 12Birinji mysalda programma gabat gelýär, sebäbi mukdar nyşanlaryň toparyna çenli uzalýar. Garaşanlary aýyrsaňyz, {3 quant mukdar diňe “g” harpyna degişlidir. Şeýle hem, nyşan synplary bilen kesgitleýjileri ulanyp bilersiňiz: Основы регулярных выражений в Java. Часть 3 - 13{3} mukdar görkezijisi birinji mysalda ýaýyň içinde, ikinjisinde bolsa diňe “c” harpyna degişlidir.

Açgöz, ýalta we aşa açgöz mukdarlaryň arasyndaky tapawutlar

Açgöz, göwünsiz we eýe mukdarlaryň arasynda azajyk tapawutlar bar. Açgöz mukdarda kesgitleýjiler şeýle atlandyrylýar, sebäbi mümkin bolan iň uzyn oýny tapmaga synanyşýarlar: programma ilki bilen ähli setiri "iýmäge" synanyşýar, eger bir oýun tapylmasa, bir nyşan taşlanýar we oýun tapylýança gözleg gaýtalanýar ýa-da indi simwol galmaýar. Beýleki tarapdan, ýalta adamlar, setir tapýança başlaýarlar, gabat gelýänçä häsiýetden soň häsiýet goşýarlar. Netijede, gabanjaň mukdar açgözlükdäki ýaly nyşanlary aýyrman, tutuş setiri bir gezek gözden geçirýär. Görkeziş üçin xfooxxxxxxfoo setirini ulanarys. Основы регулярных выражений в Java. Часть 3 - 14Birinji mysalda açgözler ulanylýar. Kantifikator açgöz bolansoň, tapylan oýunda tutuş setir bar. Açgöz mukdar ähli gabat gelýänleri setirde tapyp bilmez, sebäbi birinji ädimde, tutuş setiri gözden geçirenden soň, bir gabat geler we işi tamamlar. Ikinji mysal ýalta we setiriň başyndan başlap, häsiýet boýunça häsiýet goşýar. Programma “boşlugy” barlamak bilen başlaýar, ýöne şondan bäri "foo" yzygiderliligi setiriň başynda däl, gözleg "x" harpynyň goşulmagy bilen dowam edýär, şondan soň 0 we 4 indeksleriň arasynda ilkinji oýun tapylar. Gözleg setiriň ahyryna çenli dowam edýär we ikinji oýun 4 bilen 13 indeksleriň arasynda tapylar. Üçünji mysal tötänlik tapmaýar, sebäbi mukdar gabanjaň. Bu ýagdaýda yzygiderli aňlatma. * + "Foo" üçin hiç zat galdyrman, bütin setiri "iýdi". Gerek däl bir zady setirde taşlamaly bolanyňyzda gabanjaň mukdary ulanyň, bu açgöz mukdardan has täsirli bolar. Bu hemmesi! Çeşmä baglanyşyk: Java-da yzygiderli aňlatmalaryň esaslary. 3-nji bölüm
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION