Alternatsiya (yoki) |
Alternatsiya (alternation) โ muntazam ifodada "buni yoki uni" degan mantiqni ifodalash usuli. U vertikal chiziq | belgisi bilan yoziladi. Masalan, gul|lola|atirgul โ uch guldan istalgan birini tutadi.
Oddiy alternatsiya
| chapdagi va o'ngdagi variantlardan birortasini tanlaydi. Dvigatel chapdan o'ngga tekshiradi va birinchi mos kelganini oladi:
Alternatsiyani belgilar sinfi [...] bilan chalkashtirmaslik kerak. Sinf faqat alohida belgilar orasidan tanlaydi, alternatsiya esa butun ifodalar (bir necha belgili so'zlar) orasidan tanlaydi:
Qavs bilan chegaralash
Bu โ alternatsiyaning eng muhim nozikligi. | ning "ta'sir doirasi" juda keng โ u o'zidan chapdagi va o'ngdagi hamma narsani qamrab oladi. Variantni cheklash uchun uni qavsga olamiz.
Masalan, "Toshkent shahri" yoki "Samarqand shahri" ni tutmoqchimiz. Qavssiz xato bo'ladi:
To'g'ri yechim โ qavs bilan faqat shahar nomini alternatsiya qilamiz, "shahri" so'zi esa umumiy bo'lib qoladi:
| ni qavssiz ishlatish. Yodda tuting: abc|def = abc yoki def, lekin a(bc|de)f = abcf yoki adef.Tutmaydigan guruh bilan
Agar alternatsiya uchun qavs kerak-u, lekin uning mazmunini saqlash shart bo'lmasa, tutmaydigan guruh (?:...) ni ishlatgan ma'qul:
(?:...) keraksiz tutib olishlarni oldini oladi. Bu, ayniqsa, keyin match guruhlarini raqam bo'yicha o'qiganda chalkashlikni kamaytiradi.Amaliy misol: vaqt (soat:daqiqa)
Vaqtni hh:mm formatida tutamiz. Soat 00 dan 23 gacha, daqiqa 00 dan 59 gacha. Alternatsiya bilan soatning ikki holatini ifodalaymiz:
[01]\dโ 00 dan 19 gacha (birinchi raqam 0 yoki 1, ikkinchisi istalgan);2[0-3]โ 20 dan 23 gacha.
E'tibor bering, daqiqa qismi oddiy: [0-5]\d โ birinchi raqam 0..5, ikkinchisi istalgan, ya'ni 00..59.
Amaliy misol: sanani tekshirish
kun.oy.yil ko'rinishidagi sanani soddaroq tekshiramiz. Bu yerda alternatsiya kun va oy oralig'ini ifodalashda yordam beradi:
Bu shablon 40.13.2000 ni rad etadi, chunki 40 kun ham, 13 oy ham oraliqqa kirmaydi. E'tibor bering, nuqta \. deb eskeyplangan โ aks holda u "istalgan belgi" ma'nosini beradi.
31.02.2026 (fevralda 31-kun yo'q) shablon uchun to'g'ri ko'rinadi. Haqiqiy kalendar tekshiruvini Date obyekti bilan alohida qilish kerak.Alternatsiya tuzoqlari
Bir necha nozik holatni bilib qo'ying:
- Tartib muhim: dvigatel chapdan o'ngga tekshiradi va birinchi mos kelganini oladi.
Jon|Jonon"Jonon" so'zida faqat "Jon"ni tutadi โ uzunroq variantni oldinga qo'ying:Jonon|Jon; - Bo'sh variant:
(a|)ikkinchi variant bo'sh, ya'ni "a yoki hech nima" โ bu ba'zan kutilmagan bo'sh mos kelishlar beradi; - Anchorlar bilan:
^gul|lola$= (satr boshida "gul") yoki (satr oxirida "lola"). Butun satrni cheklash uchun^(gul|lola)$yozing.
Xulosa
|โ "yoki": bir necha variantdan birini tanlaydi;|ning ta'sir doirasi keng, shuning uchun variantni ko'pincha qavs bilan cheklash kerak;- Mazmuni kerak bo'lmasa,
(?:...)โ tutmaydigan guruhni ishlating; - Alternatsiya sana, vaqt, shaharlar ro'yxati kabi cheklangan variantlarni tutishda ideal;
- Tartib muhim โ uzun/aniq variantni oldinga qo'ying;
- Anchor (
^,$) bilan ishlashda butun ifodani^(...)$ga o'rang.