Regulyar ifodalar sintaksisi
Qisqacha regulyar ifodalarning sintaksisining ba’zi elementlarini ko‘rib chiqamiz:
^: moslik satr boshidan boshlanishi kerak (masalan, @ «^ sa\w *» ifodasi «Salom tinchlik» satridagi «salom» so‘ziga mos keladi)
$: satrning oxiri (masalan, @ «\w *yo$ »ifodasi« dunyo »so‘ziga mos keladi, chunki«yo »qismi eng oxirida)
.: nuqta simvoli har qanday yagona simvolni aniqlaydi(masalan, «h.t» ifodasi «haqiyqat» yoki «hisobat» so‘ziga mos keladi)
*: oldingi simvol nol’ va undan ko‘p marta takrorlanadi
+: oldingi simvol bir va undan ko‘p marta takrorlanadi
?: oldingi simvol nol yoki bir marta takrorlanadi
\ s: har qanday probelli simvolga mos keladi
\ S: probel bo‘lmagan har qanday simvolga mos keladi
\ w: har qanday alfavit-raqamli simvolga mos keladi
\ W: har qanday alfavit-raqamli simvol bo‘lmasligiga mos keladi
\ d: har qanday o‘nlik raqamga mos keladi
\ D: o‘nlik raqam bo‘lmagan har qanday simvolga mos keladi
Endi foydalanishning ayrim misollarini ko‘rib chiqamiz. Birinchi misolni « "Dasturchi dasturiy ta'minot yaratishda dasturlash tillaridan foydalanadi";» degan qisqa so‘z bilan olib, unda “tur ” ildizi uchrashadigan barcha so‘zlarni topamiz
string s = "Dasturchi dasturiy ta'minot yaratishda dasturlash tillaridan foydalanadi";
Regex regex = new Regex(@"dastur(\w*)", RegexOptions.IgnoreCase);
Chunki\w * ifodasi har qanday uzunlikdagi alfavit-raqamli simvollarning har qanday izchil izchil bo‘lishiga muvofiq bo‘lsa, ushbu ifoda “dastur” ildizini o‘z ichiga olgan barcha so‘zlarni topadi.
Ikkinchi oddiy misol – telefon raqamini 111-111-1111 formatida topish:
string s = "456-435-2318 123-456-4565 ";
Regex regex = new Regex(@"\d{3}-\d{3}-\d{4}");
MatchCollection matches = regex.Matches(s);
if (matches.Count > 0)
{
foreach (Match match in matches)
Console.WriteLine(match.Value);
}
else
{
Console.WriteLine("moslik topilMADI");
}
Agar biz aniq belgilar qancha bo‘lishi kerakligini aniq bilsak, ularning sonini aniq ko‘rsatishimiz mumkin :\d {3} – ya’ni ushbu holda uchta raqam.
Biz nafaqat belgilarning aniq turlari – bo‘shliqlar, raqamlar bo‘yicha qidirishni o‘rnatishimiz mumkin emas, balki muntazam ifodaga kirishi lozim bo‘lgan aniq belgilarni ham qo‘yishimiz mumkin. Masalan, telefon raqami bilan misolni o‘zgartirib, quyidagi simvollar qanday bo‘lishi kerakligini aniq ko‘rsatamiz:
string s = "456-435-2318 123-456-4565";
Regex regex = new Regex("[0-9]{3}-[0-9]{3}-[0-9]{4}");
Kvadrat qavslardv ushbu joyda uchrashishi lozim bo‘lgan simvollar diapazoni beriladi. Natijada ushbu va oldingi telefon raqami namunalari ekvivalent bo‘ladi.
Shuningdek, alifbo belgilari uchun diapazonni belgilash mumkin: Regex regex = new Regex ([a-v] {5}).
Alohida qiymatlarni ham koʻrsatish mumkin: Regex regex = new Regex (@ "[2] * - [0-9] {3} -\d {4}).
Operatsiya yordamida muqobil belgilarni belgilash mumkin: Regex regex = new Regex (@ "[2\| 3] {3} - [0-9] {3} -\d {4}). Bunday namuna, masalan, “222-222-2222 ” va“ 323-435-2318 ” satrlariga muvofiq bo‘ladi. Shuningdek, “235-435-2318 ” satri namunaga kirmaydi, chunki birinchi uch raqamdan biri 5 raqamidir.
Jumladan, *, + va boshqa qator belgilar maxsus simvollar sifatida foydalaniladi. Shunday savol tug‘ilmoqda, agar biz nuqta,yulduzcha yoki boshqa maxsus simvol mavjud bo‘lgan satrlarni topishimiz lozim bo‘lsa, nima qilish kerak? Bunday holatda biz bu belgilarda slesh simvolini foydalanishimiz kerak:
Regex regex = new Regex(@"[2\|3]{3}\.[0-9]{3}\.\d{4}");
// "222.222.2222" satri mos keladi
|