Ayo nerusake sinau babagan ekspresi reguler. Ing artikel iki kita bakal nliti kelas karakter sing wis ditemtokake uga kuantifikasi (nelusuri urutan).
Kelas Karakter sing wis ditemtokake
API kelasPattern
ngemot kelas karakter sing wis ditemtokake sing nawakake trabasan sing trep kanggo ekspresi reguler sing umum digunakake. Ing tabel iki, konstruksi ing kolom kiwa minangka representasi singkatan saka ekspresi ing kolom tengen. Contone, \d
tegese nomer (0-9), \w
tegese huruf gedhe utawa cilik, garis ngisor utawa nomer). Gunakake kelas karakter sing wis ditemtokake yen bisa. Iki bakal nggawe kode luwih gampang diwaca lan ndandani kesalahan. Konstruksi sing diwiwiti kanthi backslash diarani lolos utawa dilindhungi. Ing artikel sadurunge, kita wis ngomong babagan uwal karakter khusus kanthi garis miring utawa simbol \Q
lan \E
digunakake minangka karakter biasa. Yen sampeyan nggunakake backslash karo karakter biasa (aksara), sampeyan kudu uwal backslash kanggo ekspresi kanggo kompilasi.
private final String REGEX = "\\d"; // цифра
Ing conto iki \d
, ekspresi biasa; backslash tambahan perlu kanggo program kanggo ngumpulake. Program tes kita maca ekspresi reguler langsung saka konsol, mula ora ana garis miring tambahan sing dibutuhake. Conto ing ngisor iki nduduhake panggunaan kelas karakter sing wis ditemtokake: Ing telung conto pisanan, ekspresi reguler mung " .
" (karakter khusus titik), sing tegese karakter apa wae. Mulane, panelusuran sukses ing kabeh kasus. Conto liyane nggunakake kelas karakter sing wis ditemtokake, makna sing kita rembugan ing tabel ing ndhuwur.
Quantifiers
Quantifiers ngidini sampeyan nemtokake jumlah kedadeyan karakter ing senar. Ayo dideleng kanthi luwih rinci babagan cara kerja kuantifier sing rakus, kesed, lan rakus banget. Sepisanan, bisa uga koyone pengukur X?, X?? lan X?+ dianggo kanthi cara sing padha: "X ana sepisan utawa ora kabeh." Ana bedane tipis ing implementasine quantifier kasebut, sing bakal kita deleng ing ngisor iki.Nul dawa cocog
Ayo miwiti karo sing rakus. Ayo nulis telung ekspresi reguler sing beda: huruf "a" kanthi karakter khusus ?, * utawa +. Ayo ndeleng apa sing kedadeyan yen kita nyoba ekspresi reguler iki ing baris kosong: Ing conto ing ndhuwur, telusuran sukses ing rong kasus pisanan, amarga ekspresi a? lan * ngidini karakter a ilang saka senar. Uga elinga yen indeks pertandhingan wiwitan lan pungkasan padha (0). Wiwit senar input ora dawa, program ora nemokake apa-apa :) ing posisi pisanan. Kasus iki diarani pertandhingan dawa nol. Pertandhingan kasebut dumadi ing sawetara kasus: nalika baris input kosong, ing wiwitan baris input, sawise karakter pungkasan baris, utawa ing antarane karakter ing baris. Pertandhingan dawa nol gampang ditemokake: diwiwiti lan diakhiri ing posisi sing padha. Ayo katon ing sawetara conto liyane saka cocog zero-dawa. Ayo njelajah pertandhingan dawa nol kanthi sawetara conto liyane. Ayo ngganti senar input kanggo karakter "a" lan mirsani efek menarik: Kabeh telu quantifiers nemokake karakter "a", nanging loro pisanan, sing ngidini kanggo anané karakter, nemokake match nul-dawa ing posisi 1 - sawise karakter pungkasan saka senar. Iki kedadeyan amarga program nganggep karakter "a" minangka senar lan "mlaku" liwat nganti ora ana sing cocog maneh. Gumantung ing quantifier digunakake, program bakal utawa ora nemokake "apa-apa" ing mburi senar. Saiki ayo kang ngganti senar input kanggo urutan limang aksara "a": expression biasa a? nemokake cocog kanggo saben aksara ing senar kapisah. Ekspresi a* nemokake loro sing cocog: urutan karakter "a"' lan cocog nol-dawa ing posisi 5. Lan pungkasanipun, expression biasa a + nemokake mung urutan karakter "a", tanpa golek "apa-apa" :) Apa bakal kelakon yen senar ngemot karakter beda diwenehi minangka input? Contone, "ababaaaab": Karakter "b" ana ing posisi 1, 3, lan 8 lan program kasebut nemokake sing cocog karo nol-dawa ing posisi kasebut. Ekspresi biasa a? ora nggatekake "b", nanging mung nggoleki anane (utawa ora ana) karakter "a". Yen quantifier ngidini ora ana "a", kabeh karakter ing senar liyane saka "a" bakal ditampilake minangka match nul-dawa. Kanggo nemokake urutan dawa tartamtu, cukup nemtokake dawa ing kurung kriting: Ekspresi reguler a{3} nggoleki urutan telung karakter "a". Ora ana sing ditemokake ing baris pisanan amarga ora cukup a ing baris kasebut. Kapindho ngemot 3 karakter, sing ditemokake program kasebut. Tes katelu uga nemokake pertandhingan ing wiwitan senar. Kabeh sawise karakter 3rd ora gawe marem expression biasa, ing kode ing ngisor iki lan bakal ana sawetara cocog: Kanggo nemtokake dawa urutan minimal, gunakake: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.
Ing conto iki, program nemokake mung siji cocog amarga senar meets syarat minimal dawa urutan (3) "a" karakter. Akhire, nyetel dawa urutan maksimum: Ing conto iki, pertandhingan pisanan rampung ing karakter enem. Pertandhingan kapindho ngemot karakter sawise sing kaping enem, amarga padha gawe marem requirement dawa minimal. Yen string luwih cendhek siji karakter, ora bakal ana sing cocog liyane.
GO TO FULL VERSION