JavaRush /Blog Jawa /Random-JV /Ungkapan Biasa ing Basa Jawa, Part 2

Ungkapan Biasa ing Basa Jawa, Part 2

Diterbitake ing grup
We presentake kanggo manungsa waé terjemahan saka pandhuan singkat kanggo ekspresi reguler ing Jawa, ditulis dening Jeff Friesen kanggo situs web javaworld . Kanggo gampang maca, kita wis dibagi artikel dadi sawetara bagean. Ungkapan Biasa ing Basa Jawa, Part 2 - 1Ungkapan Biasa ing Basa Jawa, Part 1
Nggabungake sawetara kisaran
Sampeyan bisa nggabungake pirang-pirang kisaran menyang kelas karakter kisaran siji kanthi nyelehake ing sisih. Contone, kelas kasebut [a-zA-Z]cocog karo kabeh karakter alfabet Latin ing huruf cilik utawa gedhe.

Nggabungake sawetara kisaran

Sampeyan bisa nggabungake pirang-pirang kisaran menyang kelas karakter kisaran siji kanthi nyelehake ing sisih. Contone, kelas kasebut [a-zA-Z]cocog karo kabeh karakter alfabet Latin ing huruf cilik utawa gedhe.

Nggabungake Kelas Karakter

Uni kelas karakter kasusun saka sawetara kelas karakter nested lan cocog kabeh karakter ing serikat asil. Contone, kelas [a-d[m-p]]cocog karakter saka amenyang dlan saka mkanggo p. Coba conto ing ngisor iki: java RegexDemo [ab[c-e]] abcdef Conto iki bakal nemokake karakter a, b, c, dlan e, sing ana sing cocog ing abcdef:
regex = [ab[c-e]]
input = abcdef
Found [a] starting at 0 and ending at 0
Found [b] starting at 1 and ending at 1
Found [c] starting at 2 and ending at 2
Found [d] starting at 3 and ending at 3
Found [e] starting at 4 and ending at 4

Persimpangan kelas karakter

Persimpangan kelas karakter kasusun saka karakter umum kanggo kabeh kelas nested lan cocog mung karakter umum. Contone, kelas [a-z&&[d-f]]cocog karakter d, elan f. Coba conto ing ngisor iki: java RegexDemo "[aeiouy&&[y]]" party Elinga yen ing sistem operasi Windows, kuotasi pindho dibutuhake amarga cangkang printah dianggep &minangka pemisah printah. Conto iki mung bakal nemokake karakter ysing cocog ing party:
regex = [aeiouy&&[y]]
input = party
Found [y] starting at 4 and ending at 4

Ngurangi kelas karakter

Kelas karakter subtracting kasusun saka kabeh karakter kajaba sing ana ing kelas karakter nested, lan cocog mung karakter isih. Contone, kelas [a-z&&[^m-p]]cocog karakter saka amenyang llan saka qkanggo z: java RegexDemo "[a-f&&[^a-c]&&[^e]]" abcdefg Conto iki bakal nemokake karakter dlan fsing ana cocog ing abcdefg:
regex = [a-f&&[^a-c]&&[^e]]
input = abcdefg
Found [d] starting at 3 and ending at 3
Found [f] starting at 5 and ending at 5

Kelas Karakter sing wis ditemtokake

Sawetara kelas karakter katon cukup kerep ing ekspresi reguler kanggo mbenerake panggunaan notasi shorthand. Kelas kasebut Patternnawakake kelas karakter sing wis ditemtokake minangka singkatan kasebut. Sampeyan bisa nggunakake kanggo nyederhanakake ekspresi reguler lan nyilikake kesalahan sintaksis. Ana sawetara kategori kelas karakter sing wis ditemtokake: standar, POSIX, java.lang.Characterlan sifat Unicode kayata skrip, blok, kategori, lan biner. Dhaptar ing ngisor iki mung nuduhake kategori kelas standar:
  • \d: Nomer. setara [0-9].
  • \D: Karakter non-numerik. setara [^0-9].
  • \s: Karakter spasi putih. setara [ \t\n\x0B\f\r].
  • \S: Ora karakter spasi putih. setara [^\s].
  • \w: Simbol wujud tembung. setara [a-zA-Z_0-9].
  • \W: Ora watake gawe tembung. setara [^\w].
Conto ing ngisor iki nggunakake kelas karakter sing wis ditemtokake \wkanggo njlèntrèhaké kabeh karakter tembung ing teks input: java RegexDemo \w "aZ.8 _" Deleng kanthi teliti asil eksekusi ing ngisor iki, sing nuduhake yen karakter titik lan spasi ora dianggep minangka karakter tembung:
regex = \w
input = aZ.8 _
Found [a] starting at 0 and ending at 0
Found [Z] starting at 1 and ending at 1
Found [8] starting at 3 and ending at 3
Found [_] starting at 5 and ending at 5
Pemisah garis
Dokumentasi SDK kelas Patternnggambarake metakarakter titik minangka kelas karakter sing wis ditemtokake sing cocog karo karakter apa wae kajaba pemisah baris (urutan siji utawa rong karakter sing menehi tandha pungkasan baris). Pangecualian yaiku mode dotall (sing bakal dibahas sabanjure), ing ngendi titik uga cocog karo pemisah garis. Kelas Patternmbedakake pemisah baris ing ngisor iki:
  • karakter bali kreta ( \r);
  • karakter baris anyar (simbol kanggo maju kertas siji baris) ( \n);
  • karakter bali gerbong langsung disusul karakter baris anyar ( \r\n);
  • karakter baris sabanjure ( \u0085);
  • karakter pemisah baris ( \u2028);
  • simbol pemisah paragraf ( \u2029)

Klompok sing dijupuk

Klompok panangkepan digunakake kanggo nyimpen set karakter sing ditemokake supaya bisa digunakake maneh nalika nggoleki miturut pola. Konstruksi iki minangka urutan karakter sing diapit ing metakarakter kanthi tanda kurung ( ( )). Kabeh karakter ing grup sing dijupuk dianggep minangka wutuh nalika nggoleki miturut pola. Contone, grup panangkepan ( Java) nggabungake huruf J, a, vlan adadi unit siji. Klompok panangkepan iki nemokake kabeh kedadeyan pola Javaing teks input. Kanthi saben pertandhingan, karakter sing disimpen sadurunge Javadiganti karo sing sabanjure. Klompok sing dijupuk bisa disarang ing grup sing dijupuk liyane. Contone, ing ekspresi reguler, (Java( language))grup (language)dipasang ing grup (Java). Saben klompok jupuk nested utawa non-nested diwenehi nomer, wiwit saka 1, lan nomer saka kiwa menyang tengen. Ing conto sadurunge, (Java( language))cocog njupuk grup nomer 1 lan (language)cocog dijupuk grup nomer 2. Ing expression biasa (a)(b), (a)cocog dijupuk grup nomer 1 lan (b)dijupuk grup nomer 2. Ungkapan Biasa ing Basa Jawa, Part 2 - 2Cocokake disimpen dening dijupuk grup bisa mengko diakses nggunakake backreferences. Ditemtokake minangka karakter backslash ngiring dening karakter numerik cocog kanggo nomer klompok dijupuk, backreference ngijini sampeyan kanggo deleng karakter ing teks dijupuk dening grup. Duwe backlink nyebabake matcher ngrujuk menyang asil panelusuran sing disimpen klompok sing dijupuk adhedhasar nomer kasebut, banjur gunakake karakter saka asil kasebut kanggo nyoba nggoleki luwih lanjut. Conto ing ngisor iki nuduhake panggunaan backreference kanggo nemokake kesalahan gramatikal ing teks: java RegexDemo "(Java( language)\2)" "The Java language language" Conto iki (Java( language)\2)nggunakake ekspresi reguler kanggo nemokake kesalahan gramatikal kanthi tembung duplikat languagelangsung Javaing teks input "The Java language language". Ekspresi reguler iki nemtokake rong klompok kanggo dijupuk: nomer 1 – (Java( language)\2), cocog karo Java language languagelan nomer 2 – (language), cocog karo karakter spasi ngiring dening language. Referensi mburi \2ngidini asil sing disimpen saka grup nomer 2 bisa dideleng maneh supaya sing cocog bisa nggoleki kedadeyan kapindho spasi sing diikuti dening language, sanalika sawise kedadeyan pisanan spasi lan language. Asil saka matcher RegexDemokaya ing ngisor iki:
regex = (Java( language)\2)
input = The Java language language
Found [Java language language] starting at 4 and ending at 25

Tandha wates

Kadhangkala sampeyan kudu nindakake pertandhingan pola ing wiwitan baris, ing wates tembung, ing pungkasan teks, lsp. Sampeyan bisa nindakake iki kanthi nggunakake salah siji saka matcher pinggiran kelas Pattern, yaiku konstruksi ekspresi reguler sing nggoleki sing cocog ing lokasi ing ngisor iki:
  • ^: Wiwitan baris;
  • $: Pungkasan baris;
  • \b: Watesan tembung;
  • \B: Watesan tembung pseudo;
  • \A: Wiwitan teks;
  • \G: Pungkasan pertandhingan sadurunge;
  • \Z: Pungkasan teks, ora ngetung pemisah baris pungkasan (yen ana);
  • \z: Pungkasan teks
Conto ing ngisor iki nggunakake ^metacharacter matcher wates kanggo nemokake garis sing diwiwiti karo The, ngiring dening karakter tembung nol utawa luwih: java RegexDemo "^The\w*" Therefore Karakter kasebut ^nemtokake yen telung karakter pisanan teks input kudu cocog karo karakter pola consecutive T, hlan e, kang bisa ngiring dening sembarang nomer. saka simbol-simbol mbentuk tembung. Punika asil eksekusi:
regex = ^The\w*
input = Therefore
Found [Therefore] starting at 0 and ending at 8
Apa sing kedadeyan yen sampeyan ngganti baris perintah dadi java RegexDemo "^The\w*" " Therefore"? Ora ana sing cocog bakal ditemokake amarga Thereforeteks input didhisiki dening karakter spasi.

Nul dawa cocog

Kadhangkala, nalika nggarap pencocokan pinggiran, sampeyan bakal nemoni pertandhingan dawa nol. Совпадение нулевой длиныyaiku tetandhingan kang ora ngemot aksara. Bisa kedadeyan ing teks input kosong, ing wiwitan teks input, sawise karakter pungkasan teks input, lan ing antarane rong karakter teks input. Pertandhingan sing dawane nol gampang dingerteni amarga mesthi diwiwiti lan diakhiri ing posisi sing padha. Coba conto ing ngisor iki: java RegExDemo \b\b "Java is" Conto iki nggoleki rong wates tembung sing berturut-turut, lan asile katon kaya iki:
regex = \b\b
input = Java is
Found [] starting at 0 and ending at -1
Found [] starting at 4 and ending at 3
Found [] starting at 5 and ending at 4
Found [] starting at 7 and ending at 6
Kita ndeleng sawetara pertandhingan dawa nol ing asil. Posisi pungkasan ing kene kurang siji tinimbang posisi wiwitan, amarga RegexDemoaku nemtokake kode sumber ing Listing 1 end() – 1. Ungkapan Biasa ing Basa Jawa, Part 2 - 3

Quantifiers

Quantifier minangka konstruksi ekspresi reguler sing sacara eksplisit utawa implisit nggandhengake pola karo nilai numerik. Nilai numerik iki nemtokake kaping pirang-pirang nggoleki pola kasebut. Quantifiers dipérang dadi rakus, kesed lan super rakus:
  • Pengukur rakus ( ?, *utawa +) dirancang kanggo nemokake match paling dawa. Aku bisa takon X? kanggo nemokake siji utawa kurang kedadeyan X, X*nemokake nol utawa luwih X, X+nemokake siji utawa luwih kedadeyan X, X{n}nemokake nkedadeyan X, X{n,}nemokake paling sethithik (lan bisa uga luwih) nkedadeyan , Xlan X{n,m}nemokake paling sethithik nnanging ora mluwih X.
  • Kuantasi kesed ( ??, *?utawa +?) dirancang kanggo nemokake match paling cendhak. Sampeyan bisa nemtokake X??kanggo nelusuri siji utawa kurang kedadeyan saka X, X*? kanggo nemokake nol utawa luwih kedadeyan X, X+?nemokake siji utawa luwih kedadeyan X, X{n}?nemokake nkedadeyan X, X{n,}?nemokake paling ora (lan bisa uga luwih) nkedadeyan X, lan X{n,m}?nemokake paling ora nnanging ora luwih saka mkedadeyan X.
  • Ukara super rakus ( ?+, *+utawa ++) padha karo panambang rakus, kajaba panambang super rakus mung ngupayakake siji-sijine nggolek tetandhingan sing paling dawa, dene panambang rakus bisa nindakake pirang-pirang usaha. Bisa disetel X?+kanggo nemokake siji utawa kurang kedadeyan X, X*+kanggo nemokake nol utawa luwih kedadeyan X, X++kanggo nemokake siji utawa luwih kedadeyan X, X{n}+kanggo nemokake nkedadeyan X, X{n,}+nemokake paling sethithik (lan bisa uga luwih) nkedadeyan , Xlan X{n,m}+ nemokake paling ora nnanging ora luwih saka mkedadeyan . X.
Conto ing ngisor iki nggambarake panggunaan kuantifier rakus: java RegexDemo .*ox "fox box pox" Iki asile:
regex = .*ox
input = fox box pox
Found [fox box pox] starting at 0 and ending at 10
Kuantifier rakus ( .*) nemokake urutan paling dawa saka karakter pungkasan ing ox. Iku nganggo kabeh teks input banjur muter maneh nganti ndeteksi yen teks input rampung karo karakter iki. Coba saiki quantifier malas: java RegexDemo .*?ox "fox box pox" Asil:
regex = .*?ox
input = fox box pox
Found [fox] starting at 0 and ending at 2
Found [ box] starting at 3 and ending at 6
Found [ pox] starting at 7 and ending at 10
Kuantifikasi males ( .*?) nemokake urutan karakter paling cendhak sing diakhiri karo ox. Diwiwiti nganggo senar kosong lan mboko sithik nganggo karakter nganti nemu sing cocog. Banjur terus digunakake nganti teks input kesel. Pungkasan, ayo goleki kuantitas super rakus: java RegexDemo .*+ox "fox box pox" Lan iki asile:
regex = .*+ox
input = fox box pox
Pengukuran ekstra rakus ( .*+) ora nemokake sing cocog amarga nggunakake kabeh teks input lan ora ana sing bisa dicocogake oxing pungkasan ekspresi reguler. Beda karo quantifier rakus, quantifier super rakus ora muter maneh.

Nul dawa cocog

Kadhangkala nalika nggarap quantifiers sampeyan bakal nemoni pertandhingan dawa nol. Contone, nggunakake kuantifier rakus ing ngisor iki ngasilake pirang-pirang pertandhingan dawa nol: java RegexDemo a? abaa Asil nglakokake conto iki:
regex = a?
input = abaa
Found [a] starting at 0 and ending at 0
Found [] starting at 1 and ending at 0
Found [a] starting at 2 and ending at 2
Found [a] starting at 3 and ending at 3
Found [] starting at 4 and ending at 3
Ana limang pertandhingan ing asil eksekusi. Senajan pisanan, katelu lan papat cukup samesthine (padha cocog karo posisi telung huruf aing abaa), kaloro lan kaping lima bisa kaget sampeyan. Iku misale jek sing nuduhake apa asing cocog bkanggo mburi teks, nanging ing kasunyatan iki ora. Ekspresi reguler a?ora nggoleki bing pungkasan teks. Iku nggoleki ana utawa ora a. Nalika a?ora ketemu a, laporan minangka match nul-dawa.

Ekspresi gendera bersarang

Matchers nggawe sawetara asumsi standar sing bisa diganti nalika nyusun ekspresi reguler dadi pola. Kita bakal ngrembug masalah iki mengko. Ekspresi reguler ngidini sampeyan ngilangi standar apa wae kanthi nggunakake ekspresi gendera bersarang. Konstruksi ekspresi reguler iki ditemtokake minangka metakarakter kurung ing saubengé tandha pitakon metakarakter ( ?), diikuti karo aksara Latin cilik. Kelas Patternngerti ekspresi gendera bersarang ing ngisor iki:
  • (?i): Ngaktifake pencocokan pola cilik-sensitif. Contone, nalika nggunakake printah, java RegexDemo (?i)tree Treehouseurutan karakter Treecocog pola tree. Default yaiku telusuran pola sensitif huruf cilik.
  • (?x): Ngidini nggunakake karakter spasi putih lan komentar sing diwiwiti saka metacharacter ing pola kasebut #. Matcher bakal nglirwakake loro. Contone, kanggo java RegexDemo ".at(?x)#match hat, cat, and so on" matterurutan karakter matcocog pola .at. Kanthi gawan, karakter spasi putih lan komentar ora diijini, lan matcher dianggep minangka karakter sing melu telusuran.
  • (?s): Mbisakake mode dotall, ing ngendi metakarakter titik cocog karo pemisah baris saliyane karakter liyane. Contone, printah java RegexDemo (?s). \nbakal nemokake karakter baris anyar. Default iku ngelawan saka dotall: ora ana separator baris bakal ketemu. Contone, printah Java RegexDemo . \nora bakal nemokake karakter baris anyar.
  • (?m): Ngaktifake mode multiline, sing ^cocog karo wiwitan lan $pungkasan saben baris. Contone, java RegexDemo "(?m)^abc$" abc\nabcnemokake loro urutan ing teks input abc. Kanthi gawan, mode baris siji digunakake: ^cocog karo wiwitan kabeh teks input, lan $cocog karo pungkasane. Contone, java RegexDemo "^abc$" abc\nabcngasilake respon sing ora ana sing cocog.
  • (?u): Mbisakake alignment cilik sing sensitif Unicode. Gendéra iki, nalika digunakake bebarengan karo (?i), ngidini kanggo cocog pola cilik-sensitif miturut standar Unicode. Setelan gawan kanggo nggoleki karakter cilik-sensitif lan US-ASCII mung.
  • (?d): Mbisakake mode senar gaya Unix, ngendi matcher ngenali metacharacters ing konteks ., ^lan $mung baris pamisah \n. Default yaiku mode string gaya non-Unix: matcher ngenali, ing konteks metakarakter ing ndhuwur, kabeh pembatas baris.
Ekspresi gendera bersarang mirip grup sing dijupuk amarga karaktere diubengi dening metakarakter kurung. Ora kaya grup sing dijupuk, ekspresi gendera bersarang minangka conto grup sing ora dijupuk, sing minangka konstruksi ekspresi reguler sing ora njupuk karakter teks. Iki ditetepake minangka urutan karakter sing diubengi dening metakarakter saka kurung.
Nemtokake Multiple Nested Flag Expressions
Sampeyan bisa nemtokake macem-macem ekspresi gendera bersarang ing ekspresi reguler kanthi nyelehake ing sisih ( (?m)(?i))) utawa nyelehake huruf sing nemtokake kanthi urutan ( (?mi)).

Kesimpulan

Kaya sing wis sampeyan ngerteni saiki, ekspresi reguler pancen migunani lan dadi luwih migunani nalika sampeyan nguwasani nuansa sintaksis. Nganti saiki aku wis ngenalake sampeyan babagan dhasar ekspresi reguler lan Pattern. Ing Part 2, kita bakal nliti luwih jero menyang Regex API lan njelajah metode Pattern, Matcherlan PatternSyntaxException. Aku uga bakal nuduhake sampeyan rong aplikasi praktis saka Regex API sing bisa langsung digunakake ing program sampeyan. Ungkapan Biasa ing Basa Jawa, Bagian 3 Ungkapan Reguler ing Basa Jawa, Bagian 4 Ungkapan Reguler ing Basa Jawa, Bagian 5
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION