Boshlovchilar uchun regulyar ifodalar: sintaksis bo‘yicha shpargalka
Asoslar4 daqInnovialabs tahririyati
Qisqacha
Regulyar ifoda — matn qidirish uchun shablon; u belgi sinflari, kvantifikatorlar, langarlar va guruhlardan yig‘iladi; shu to‘rt blokni o‘zlashtirsangiz, ko‘p regexlarni o‘qiy olasiz.
Regulyar ifoda nima
Regulyar ifoda (regex) — qanday matn qidirayotganingizni tasvirlovchi qisqa shablon. U kiritilgan ma’lumot formatini tekshirish, satrlardan ma’lumot ajratib olish, kod va loglarda qidirish va almashtirish uchun ishlatiladi.
Deyarli har qanday regex to‘rtta blokdan yig‘iladi:
- nimani qidirish — belgilar va belgi sinflari;
- necha marta — kvantifikatorlar;
- qayerda — langarlar va chegaralar;
- qanday guruhlash — guruhlar va muqobillar.
JavaScript, Python, PHP, Java va Go’da sintaksis asosan bir xil, ammo tafsilotlar farq qiladi — o‘z tilingiz hujjatlari bilan solishtiring.
Belgilar va belgi sinflari
| Shablon | Ma’nosi | Mos kelish misoli |
|---|---|---|
abc | aynan «abc» | abc |
. | qator o‘tkazishdan tashqari istalgan belgi | a, 7, % |
\d | raqam | 5 |
\w | harf, raqam yoki _ | a, Z, 3, _ |
\s | bo‘sh joy belgisi | probel, tab |
\D, \W, \S | \d, \w, \s dan boshqa hammasi | |
[abc] | a, b, c belgilaridan biri | b |
[a-z] | diapazondagi belgi | k |
[^0-9] | raqamdan boshqa istalgan belgi | x |
\. | «istalgan» emas, aynan nuqta | . |
. * + ? ^ $ ( ) [ ] { } | maxsus belgilari va teskari slesh aynan o‘zini qidirayotganda \ bilan ekranlanishi kerak.
E’tibor bering: ba’zi dvijoklarda \w va \d sukut bo‘yicha faqat lotin harflari va ASCII raqamlarga mos keladi. Kirill yoki o‘zbek lotin harflari (o‘, g‘) uchun aniq sinf yoki Unicode rejimi ishonchliroq.
Kvantifikatorlar
| Shablon | Necha marta |
|---|---|
* | 0 va undan ko‘p |
+ | 1 va undan ko‘p |
? | 0 yoki 1 |
{3} | aynan 3 |
{2,5} | 2 dan 5 gacha |
{2,} | 2 va undan ko‘p |
Sukut bo‘yicha kvantifikatorlar ochko‘z — iloji boricha ko‘p narsani oladi. Ularni dangasa qilish uchun ? qo‘shing: <b>matn</b> satrida <.+> hammasini oladi, <.+?> esa faqat <b> ni.
Langarlar va chegaralar
| Shablon | Ma’nosi |
|---|---|
^ | satr boshi |
$ | satr oxiri |
\b | so‘z chegarasi |
\B | so‘z chegarasi emas |
Validatsiya uchun deyarli doim ^ va $ kerak. \d{4} shabloni «abc12345» ichidan 4 ta raqamni topadi, ^\d{4}$ esa faqat aynan to‘rtta raqamdan iborat satrni o‘tkazadi.
Guruhlar va muqobillar
| Shablon | Ma’nosi |
|---|---|
(abc) | ushlab qoluvchi guruh |
(?:abc) | ushlamaydigan guruh |
a|b | a yoki b |
\1 | birinchi guruhga qaytish havolasi |
(?<name>...) | nomli guruh (Python’da (?P<name>...)) |
const re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const m = "Sana: 2026-03-15".match(re);
console.log(m.groups.year); // "2026"
Guruh faqat kvantifikator yoki muqobil uchun kerak bo‘lsa, (?:...) dan foydalaning — shunda ushlab qolingan guruhlar raqamlanishi buzilmaydi.
Lookahead va lookbehind
Oldinga va orqaga qarovchi tekshiruvlar qo‘shni matnni mos kelishga qo‘shmasdan ko‘rib chiqadi.
| Shablon | Ma’nosi |
|---|---|
X(?=Y) | ortidan Y kelsa, X |
X(?!Y) | ortidan Y kelmasa, X |
(?<=Y)X | oldida Y bo‘lsa, X |
(?<!Y)X | oldida Y bo‘lmasa, X |
Klassik misol — parolni tekshirish: ^(?=.*\d)(?=.*[a-z]).{8,}$ — kamida 8 belgi, kamida bitta raqam va bitta kichik harf. Lookbehind hamma dvijoklarda qo‘llab-quvvatlanmaydi, ba’zilari esa uning uzunligini cheklaydi.
Flaglar
i— registrni hisobga olmaslik;g— barcha mos kelishlarni topish (JavaScript);m—^va$matnning har bir qatori uchun ishlaydi;s— nuqta qator o‘tkazishga ham mos keladi;u— Unicode rejimi (JavaScript).
Regexlarni qanday testlash
- Shablonni regex101 yoki RegExr kabi onlayn testerda yozing: ular mos kelishlarni ajratib ko‘rsatadi va har bir qismni tushuntiradi.
- Testerda tilingizdagi xuddi shu dvijokni tanlang.
- Mos kelishi kerak va kerak emas bo‘lgan satrlar ro‘yxatini tuzing, bo‘sh satr va chegaraviy holatlarni ham qo‘shing.
- Keyingi tahrirlarda regex buzilmasligi uchun bu ro‘yxatni unit testlarga o‘tkazing.