Тұрақты өрнектер (Regex) деген не?
Тұрақты өрнектер (Regex) — мәтінді іздеу, тексеру және өңдеу үшін қолданылатын үлгіге негізделген тіл.
Regex көмегімен сіз:
нақты мәтін бөліктерін таба аласыз (мысалы, email, URL, сандар)
деректер форматтарын тексере аласыз (формаларды валидациялау)
мәтінді ауыстырып, тазалай аласыз
жолдардан құрылымдалған деректерді шығара аласыз
Regex әзірлеуде, деректер аналитикасында, SEO және автоматтандыруда кеңінен қолданылады.
“Regex Tester” құралы не істейді?
Бұл құрал тұрақты өрнектерді нақты уақытта тестілеуге және нәтижені бірден көруге мүмкіндік береді.
Оның көмегімен сіз:
жолдың белгілі бір үлгіге сәйкес келетінін тексере аласыз
мәтіндегі барлық сәйкестіктерді көре аласыз
күрделі өрнектерді дебаг жасай аласыз
код жазбай-ақ әртүрлі regex нұсқаларын сынай аласыз
Танымал Regex қозғалтқыштары және олардың айырмашылықтары
Тұрақты өрнектер толық әмбебап емес. Синтаксис қолдауы қолданылатын тілге және қозғалтқышқа байланысты.
Қозғалтқыш | Қолданылуы | Ерекшеліктері |
|---|
JavaScript (ECMAScript) | Браузерлер, Node.js | Lookbehind шектеулі (нұсқаға байланысты) |
PCRE | PHP, көптеген құралдар | Ең қуатты қозғалтқыштардың бірі |
Python (re) | Python | Кейбір PCRE мүмкіндіктері жоқ |
Java (Pattern) | Java | Қатаң синтаксис |
.NET | C# | Кеңейтілген мүмкіндіктер |
Regex-ті әрқашан қолданылатын ортада тексеріңіз. Lookbehind және Unicode қолдауындағы айырмашылықтарға назар аударыңыз. Кросс-платформалық үйлесімділік үшін қарапайым өрнектерді қолданған дұрыс.
Regex флагтары (modifier flags)
Флагтар — өрнектің қалай өңделетінін өзгертетін параметрлер. Олар регистрді, іздеу аймағын (бір жол немесе бірнеше жол), және символдарды интерпретациялауды басқаруға мүмкіндік береді.
Флаг | Мағынасы |
|---|
i | Регистрді елемеу |
g | Ғаламдық іздеу |
m | Көпжолды режим |
s | Dotall (. символы \n-ды қамтиды) |
u | Unicode |
Regex-тегі арнайы символдар
Түрі | Символ | Сипаттама |
|---|
Анкерлер (позициялар) | ^ | Жолдың басы |
Анкерлер (позициялар) | $ | Жолдың соңы |
Анкерлер (позициялар) | \b | Сөз шекарасы |
Анкерлер (позициялар) | \B | Сөз шекарасы емес |
Метасимволдар | . | Жаңа жолдан (\n) басқа кез келген символ |
Метасимволдар | | | OR операторы |
Метасимволдар | \ | Экранизациялау символы |
Литералдар | a | “a” символы |
Литералдар | ab | “ab” жолы |
Квантификаторлар | * | 0 немесе одан көп қайталау |
Квантификаторлар | ? | 0 немесе 1 қайталау |
Квантификаторлар | + | 1 немесе одан көп қайталау |
Квантификаторлар | {5} | Дәл 5 рет |
Квантификаторлар | {5,} | 5 немесе одан көп |
Квантификаторлар | {5,10} | 5-тен 10-ға дейін |
Таңба кластары | \s | Бос орын символы |
Таңба кластары | \S | Бос орын емес |
Таңба кластары | \w | Сөздік символ (әріп-сан + астын сызу) |
Таңба кластары | \W | Сөздік емес символ |
Таңба кластары | \d | Сан |
Таңба кластары | \D | Сан емес |
Escape-тізбектер | [\b] | Backspace |
Escape-тізбектер | \c | Басқару символы |
Escape-тізбектер | \n | Жаңа жол |
Escape-тізбектер | \t | Табуляция |
Escape-тізбектер | \r | Каретка қайтару |
Escape-тізбектер | \ZZZ | Сегіздік символ |
Escape-тізбектер | \xZZ | Он алтылық символ |
Escape-тізбектер | \0 | Нөлдік символ |
Escape-тізбектер | \v | Тік табуляция |
Топтар | (xyz) | Ұстап алатын топ |
Топтар | (?:xyz) | Ұстамайтын топ |
Жиындар және диапазондар | [xyz] | x, y немесе z |
Жиындар және диапазондар | [^xyz] | x, y, z емес |
Жиындар және диапазондар | [a-q] | a-дан q-ға дейін |
Жиындар және диапазондар | [0-7] | 0-ден 7-ге дейін |
Ауыстыру үлгілері | $` | Сәйкестіктен бұрынғы мәтін |
Ауыстыру үлгілері | $' | Сәйкестіктен кейінгі мәтін |
Ауыстыру үлгілері | $+ | Соңғы ұсталған топ |
Ауыстыру үлгілері | $& | Толық сәйкестік |
Ауыстыру үлгілері | $n | n-ші топ (мысалы, $1, $2) |
Lookaround (тексерулер) | (?=xyz) | Оң lookahead |
Lookaround (тексерулер) | (?!xyz) | Теріс lookahead |
Lookaround (тексерулер) | (?<=xyz) | Оң lookbehind |
Lookaround (тексерулер) | (?<!xyz) | Теріс lookbehind |
Түсіндірмелер | (?#comment) | Түсіндірме (қозғалтқыш елемейді) |
Жиі қолданылатын Regex үлгілері
Міндет | Regex |
|---|
Тек сандар | ^\d+$ |
Тек латын әріптері | ^[A-Za-z]+$ |
Күн (DD.MM.YYYY) | \d{2}\.\d{2}\.\d{4} |
Домен | ^[a-z0-9.-]+\.[a-z]{2,}$ |
URL | https?:\/\/[^\s]+ |
Slug | ^[a-z0-9-]+$ |
Email (қарапайым) | ^[^\s@]+@[^\s@]+\.[^\s@]+$ |
Email (қатаң) | ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$ |
Телефон | ^\+?\d{7,15}$ |
HTML тегтері | <[^>]+> |
Күшті пароль | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).{12,}$ |
UUID | ^[0-9a-fA-F-]{36}$ |
HEX түс | ^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ |
IP (IPv4) | ^(\d{1,3}\.){3}\d{1,3}$ |
MAC мекенжайы | ^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$ |
Regex қолдануда жиі жіберілетін қателер
Тұрақты өрнектер қарапайым көрінгенімен, көптеген жасырын нюанстарға ие.
Синтаксис және логика қателері
Экранизацияны ұмыту: . кез келген символды білдіреді → \. қолданыңыз
Квантификаторларды дұрыс қолданбау: *, +, {} тек алдыңғы элементке қатысты
Greedy және lazy шатасуы: .* максимумды алады → минималды үшін .*? қолданыңыз
Жолмен жұмыс істеу қателері
^ және $ жоқ: сәйкестік жолдың кез келген бөлігінде болуы мүмкін
Регистрді елемеу: "Test" ≠ "test" → қажет болса i флагын қолданыңыз
Бос орындарды дұрыс түсінбеу: \s тек бос орын емес, табуляция, жаңа жол және т.б.
Практикалық қателер
Unicode үшін \w қолдану: көбінде \w = [A-Za-z0-9_] (кириллица кірмейді)
Күрделі форматтарды (HTML, JSON) regex арқылы парсинг жасау: сенімсіз → арнайы парсерлер қолданыңыз
Тым күрделі өрнектер: қолдау және дебаг жасау қиын
Өнімділік мәселелері
Ішкі квантификаторлар: мысалы, (.*)+ catastrophic backtracking тудыруы мүмкін
Шектеусіз үлгілер: .* үлкен мәтіндерде өнімділікті төмендетеді