Muntazam ifoda matnga qo'llanilishi mumkin bo'lgan naqsh turidir (String, Java-da). Java muntazam ifodalarni moslashtirish uchun
java.util.regex paketini taqdim etadi. Muntazam iboralar Perl dasturlash tiliga juda o'xshaydi va ularni o'rganish juda oson. Muntazam ibora matnga (uning bir qismiga) mos keladi yoki mos kelmaydi. * Agar oddiy ibora matnning bir qismiga mos kelsa, biz uni topishimiz mumkin. ** Agar muntazam ibora qo‘shma bo‘lsa, unda biz oddiy iboraning qaysi qismi matnning qaysi qismiga mos kelishini osongina aniqlashimiz mumkin.
Birinchi misol
Oddiy ibora "
[a-z] +
" matndagi barcha kichik harflarga mos keladi. dan inklyuzivgacha
[a-z]
boʻlgan har qanday belgini bildiradi va “bir yoki bir nechta” belgilarni bildiradi. Faraz qilaylik, "kod 2 java o'quv qo'llanmasini o'rganish" qatorini taqdim etamiz. Buni Java'da qanday qilish kerak Avval shablonni yaratishingiz kerak:
a
z
+
import java.util.regex.*;
Pattern p = Pattern.compile(“[a-z]+”);
matcher
Keyinchalik diagrammada xabar yuborish orqali matn uchun yaratishingiz kerak :
Matcher m = p.matcher(“code 2 learn java tutorial”);
QAYD: Konstruktorlar ham yo'q
Pattern
,
Matcher
biz ularni sinf usullari yordamida yaratamiz
Pattern
.
Pattern Class:
Sinf ob'ekti muntazam ifodaning ifodasini tashkil qiladi. Pattern klassi umumiy konstruktorlarni taqdim etmaydi. Shablonni yaratish uchun avval umumiy statik usullardan birini chaqirishingiz kerak, keyin esa sinf ob'ektini qaytaradi
Pattern
. Bu usullar argument sifatida muntazam ifodani oladi.
Matcher Class:
Finder ob'ekti naqshni sharhlovchi va kiritish satrida mos keladigan operatsiyalarni bajaradigan vositadir.
Pattern
Sinf kabi ,
Matcher
unda umumiy konstruktorlar yo'q. Ob'ektni sinf ob'ektida
Matcher
usulni chaqirish orqali olasiz . Ushbu bosqichlarni bajarganimizdan so'ng va endi bizda klassning namunasi bor , endi naqsh topilgan yoki topilmaganligini va agar topilgan bo'lsa, qaysi holatda va hokazolarni tekshirishimiz mumkin. Agar naqsh butun satrga mos kelsa, true qiymatini qaytaradi, aks holda noto'g'ri. Agar naqsh satr boshiga mos kelsa, true qiymatini qaytaradi, aks holda noto'g'ri. naqsh matnning istalgan qismiga mos kelsa, true qiymatini qaytaradi.
matcher
Pattern
Matcher m
m.matches()
m.lookingAt()
m.find ()
Moslikni topish
Muvaffaqiyatli o'yindan so'ng,
m.start() mos keladigan birinchi belgi indeksini qaytaradi va
m.end() oxirgi mos keladigan belgi indeksini va yana bittasini qaytaradi. Agar muvaffaqiyatsiz urinish bo'lsa va hech qanday mos topilmasa,
m.start()
ular
m.end()
otishadi
IllegalStateException
- Bu
RuntimeException
siz uni qo'lga olishingiz shart emas.
Oxirgi mos keladigan belgi indeksini va bittani qaytarish g'alati tuyulishi mumkin
m.end()
, lekin ko'pchilik
String
.
- Masalan,
“Now is the time“.substring(m.start(), m.end())
xuddi shu qatorni qaytaradi. Keling, kodni ko'rib chiqaylik:
import java.util.regex.*;
public class RegexTest {
public static void main(String args[]) {
String pattern = "[a-z]+";
String text = "code 2 learn java tutorial";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while(m.find()) {
System.out.print(text.substring(m.start(), m.end()) + "*");
}
}
}
Output: code*learn*java*tutorial*
Qo'shimcha usullar
Agar mos keladigan bo'lsa, unda:
m.replaceFirst(replacement)
yangi satrni qaytaradi, bu erda naqshga mos keladigan birinchi pastki qator bilan almashtiriladireplacement
m.replaceAll(replacement)
yangi satrni qaytaradi, bu erda naqshga mos keladigan har bir pastki qator almashtiriladi
m.find(StartIndex)
belgilangan indeksdan boshlab keyingi moslikni toping
m.reset()
shablonni qayta tiklaydi
m.reset(NewText)
topuvchini qayta tiklaydi va unga yangi matn beradi (ehtimol String
, StringBuffer
yoki CharBuffer
)
Oddiy ifoda sintaksisi
^
Qator boshiga mos keladi.
$
Satrning oxiriga mos keladi.
.
Yangi qatordan tashqari har qanday bitta belgiga mos keladi. m opsiyasidan foydalanish uni yangi qatorga moslashtirish imkonini beradi.
[...]
Qavslar ichidagi istalgan bitta belgiga mos keladi.
[^ ...]
Qavs ichida bo'lmagan har qanday bitta belgiga mos keladi.
\A
Butun qatorni boshlang.
\z
Butun qatorning oxiri.
\Z
Yakuniy satr terminatoridan tashqari butun qatorning oxiri.
re*
Oldingi iboraning 0 yoki undan ortiq takrorlanishiga mos keladi.
re+
Oldingi ifodaning bir yoki bir nechta mosligi.
re?
0 yoki 1 oldingi ifodaning joylashuviga mos keladi.
re{n}
To'liq mos keladi N Oldingi ifodaning takrorlanish soni.
re{n,}
Oldingi iboraning N yoki undan ortiq takrorlanishiga mos keladi.
re{n, m}
Avvalgi ifodaning kamida n va ko‘pi bilan m ta takrorlanishiga mos keladi.
a|b
a yoki b mos keladi.
(re)
Muntazam iboralar guruhi va topilgan matnni eslab qolish.
(?: re)
Topilgan matnni eslamaydigan muntazam iboralar guruhlari.
(?> re)
Qaytishsiz mustaqil naqshga mos keladi.
\w
Harflar va raqamlarga mos keladi [a-zA-Z_0-9].
\W
Bu harflar yoki raqamlar emas.
\s
Bo'shliqlarga mos keladi. [\t\n\r\f] ga ekvivalent.
\S
Bo'shliq belgilar emas.
\d
Raqamlarga mos keladi. [0-9] ga teng.
\D
Raqamlarga mos kelmaydi.
\G
Oxirgi o'yinning nuqtasiga mos keladi.
\n
Yangi qatorga mos keladi.
\b
So'z chegarasida mos keladi.
\B
So'z chegarasida emas.
\n, \t, etc.
Yangi qator, karetani qaytarish, yorliq va hokazo belgilar.
\Q
\E oldidan barcha belgilarni keltiring.
\E
Iqtibos \Q bilan boshlangan.
GO TO FULL VERSION