Санҷишгари Regex: сохтан ва ислоҳи намунаҳо бар зидди матни худ
Ифодаи муназзам забони хурдест барои тасвир кардани шакли матн. Ба ҷои пурсидани "оё ин калимаи дақиқ дар ин ҷост?", regex ба шумо имкон медиҳад бипурсед "оё сатре ҳаст, ки ба ин намуна монанд аст?" Маҳз ин чизест, ки онро барои ёфтан, тафтиш, истихроҷ ва иваз кардани матн дар муҳаррирони код, файлҳои сабт, вурудоти форма ва скриптҳо тавоно мекунад. Ин инчунин чизест, ки нодуруст фаҳмиданашро осон мекунад, зеро намунае, ки дар сар хуб ба назар мерасад, метавонад бесаранҷом бештар аз ҳадд, камтар аз ҳадд ё умуман ҳеҷ чизро мутобиқ накунад.
Маҳз барои ин санҷиши интерактивӣ аз тахминзанӣ беҳтар аст. Вақте шумо намунаро менависед ва мутобиқатҳоро дар матни намунавии воқеӣ равшан шудан мебинед, шумо бозхӯрди фаврӣ мегиред: шумо мебинед, ки чӣ дошта шудааст, чӣ гурехтааст ва кадом гурӯҳи гирифт кадом порчаро гирифтааст. Санҷишгари Regex-и мо комилан дар браузери шумо кор мекунад. Намуна ва матни намунавии шумо ҳеҷ гоҳ саҳифаро тарк намекунанд, бинобар ин шумо метавонед сатрҳои сабт, почтаҳо ё маълумоти истеҳсолиро бидуни фиристодани чизе ба сервер гузоред.

Блокҳои сохтмонии арзиши донистан
Аксари намунаҳои ҳаррӯза аз маҷмӯаи хурди порчаҳо ҷамъоварӣ шудаанд. Инҳоро омӯзед ва шумо метавонед аксарияти regex-ҳоеро, ки дар табиат вомехӯред, хонед.
Синфҳои аломатӣ маҷмӯаи аломатҳои иҷозатдодашударо тасвир мекунанд. [aeiou] ҳар як ҳарфи садоноки ягонаро мутобиқ мекунад, [0-9] як рақамро мутобиқ мекунад, ва [a-zA-Z] як ҳарфро мутобиқ мекунад. Каретка дар дохили қавс маҷмӯаро манфӣ мекунад, бинобар ин [^0-9] маънои "ҳар аломате, ки рақам нест"-ро дорад. Кӯтоҳкунандаҳо навиштанро сарфа мекунанд: \d рақам аст, \w аломати калима (ҳарфҳо, рақамҳо, зерхат) аст, \s фосилаи холист, ва нуқта . тақрибан ҳар аломати ягонаро мутобиқ мекунад.
Миқдоргарҳо мегӯянд, ки порчаи пешин чанд бор метавонад такрор шавад. * маънои сифр ё бештар, + маънои як ё бештар, ва ? маънои сифр ё як (ихтиёрӣ)-ро дорад. Барои шумораи дақиқ, {3} маънои дуруст се ва {2,4} маънои ду то чорро дорад. Пас \d{4} соли чоррақамаро мутобиқ мекунад ва colou?r ҳарду навиштанро мутобиқ мекунад.
Лангарҳо намунаро на ба аломат, балки ба мавқеъ мебанданд. ^ ба оғози матн, $ ба охири матн мутобиқат мекунад, ва \b сарҳади калимаро нишон медиҳад. Намунаи ^Error танҳо сатрҳоеро мутобиқ мекунад, ки бо "Error" оғоз мешаванд, ки маҳз он чизест, ки шумо ҳангоми таҳлили сабтҳо мехоҳед.
Гурӯҳҳо қисми намунаро дар қавс мепечонанд, ҳам барои татбиқи миқдоргар ба якчанд аломат якбора, ва ҳам барои гирифтани матни мутобиқшуда барои истифодаи дубора. Дар (\d{4})-(\d{2})-(\d{2}) ҳар гурӯҳ як ҷузъи санаро мегирад, ки шумо баъдтар мебароред. Алтернатсия бо аломати найча ба монанди "ё" амал мекунад: cat|dog|fish ҳар кадоме аз се калимаро мутобиқ мекунад.
Намунаҳое, ки воқеан истифода мебаред
Якчанд вазифаи такроршаванда аксари кори воқеиро фаро мегиранд. Барои дастгирии чизи ба монанди почта, [\w.+-]+@[\w-]+\.[\w.-]+ нуқтаи оғози амалист; тасдиқи пурраи почта тибқи спецификатсияи расмӣ бо шӯҳрати мураккабии худ маъруф аст, ва намунаи озод одатан интихоби дуруст барои равшан кардани номзадҳо аст, на рад кардани корбарон.
Барои рақамҳо, \d+ силсилаи рақамҳоро мегирад, дар ҳоле ки -?\d+(\.\d+)? манфии ихтиёрӣ ва касрҳоро мутобиқ мекунад. Барои буридани фосилаи холии пешин ва пасин, ^\s+|\s+$-ро мутобиқ кунед ва бо ҳеҷ чиз иваз кунед. Барои ёфтани калимаҳои такроршуда, намунаи бозишора \b(\w+)\s+\1\b калимаеро, ки аз паси худаш меояд, мутобиқ мекунад, ки дар он \1 ба гурӯҳи гирифтори якум ишора мекунад.

Байрақҳо тарзи мутобиқатро тағйир медиҳанд
Байрақҳо тугмаҳоеанд, ки тамоми намунаро тағйир медиҳанд. Байрақи умумӣ (g) ҳар мутобиқатро меёбад, на ин ки дар аввалин бас мешавад, ки ин чизест, ки шумо ҳангоми равшансозии ҳама мавридҳо мехоҳед. Байрақи беҳиссии ҳарф (i) error-ро ба "Error" ва "ERROR" яксон мутобиқ мекунад. Байрақи бисёрсатрӣ (m) ^ ва $-ро тағйир медиҳад, то онҳо дар оғоз ва охири ҳар сатр мутобиқ шаванд, на танҳо тамоми матн, ки барои кори сатр ба сатри сабтҳо муҳим аст. Дигар байрақҳои муфид s (dotall, ки нуқтаро мегузорад то хатҳои навро мутобиқ кунад) ва u барои коркарди пурраи Юникодро дар бар мегиранд.
Навъҳо каме аз рӯи забон фарқ мекунанд
Regex оилаи лаҳҷаҳост, на як стандарти собит. JavaScript, Python, PCRE (PHP), Java, .NET, Go ва Rust дар синтаксиси асосии боло розианд, аммо онҳо дар канорҳо фарқ мекунанд: дастгирии lookbehind, синтаксиси гурӯҳи номдор ((?<name>...) дар муқобили (?P<name>...)), гурезаҳои хосияти Юникод ва кадом байрақҳо мавҷуданд, ҳама фарқ мекунанд. Намунае, ки дар як муҳаррик кор мекунад, метавонад дар дигаре ислоҳи хурде талаб кунад, бинобар ин арзиш дорад, ки бар зидди навъе, ки шумо воқеан истифода мебаред, санҷед. Вақте намунаи худро танзим кардед, дигар абзорҳои барномасозон ва абзорҳои матнии мо метавонанд бо кори атрофии тозакунӣ, рамзгузорӣ ва табдили маълумоте, ки шумо тозагӣ мутобиқ кардаед, кӯмак кунанд.
Саволҳои зуд додашаванда
Оё матни ман ба сервер фиристода мешавад?
Не. Санҷишгари Regex комилан дар браузери шумо кор мекунад. Намуна ва матни намунавии шумо дар дастгоҳи шумо мемонанд ва ҳеҷ гоҳ бор карда намешаванд, бинобар ин часпонидани маълумоти ҳассос бехатар аст.
Ин абзор кадом навъи regex-ро истифода мебарад?
Он муҳаррики regex-и JavaScript-ро, ки дар браузери шумо дарунсохт шудааст, истифода мебарад. Синтаксиси асосӣ бо чизе, ки шумо аз аксари забонҳо медонед, мутобиқат мекунад, гарчанде ки баъзе хусусиятҳои пешрафта каме аз PCRE, Python ё .NET фарқ мекунанд.
Фарқи байни мутобиқатии тамаъкор ва танбал чист?
Пешфарз миқдоргарҳо тамаъкоранд ва то ҳадди имкон бештар матн мегиранд. Илова кардани аломати савол онҳоро танбал мекунад, бинобар ин онҳо то ҳадди имкон камтар мегиранд. Масалан, намунаи нуқта-ситора тамаъкор аст, дар ҳоле ки нуқта-ситора-аломати-савол танбал аст.
Чӣ гуна аломати мушахаси айниро мутобиқ кунам?
Онро бо хати аққиб фирор диҳед. Барои мутобиқати нуқтаи воқеӣ, хати аққиб-нуқта нависед. Ҳамин ба дигар мета-аломатҳо ба монанди қавсҳо, кунҷакҳо, аломати плюс ва аломати савол дахл дорад.
Чаро намунаи ман ҳеҷ чизро мутобиқ намекунад?
Сабабҳои маъмул байрақи умумии гумшуда, лангарҳое, ки намунаро ба мавқеи нодуруст мебанданд, аломати мушахаси фирорнашуда ё миқдоргарҳои тамаъкоре, ки аз ҳудуди интизории шумо мегузаранд, мебошанд. Пораро ба пора санҷед, то гунаҳкорро ёбед.
Оё ман метавонам қисматҳои мутобиқатро гирам?
Бале. Қисми намунаро дар қавс печонед, то гурӯҳи гирифт созед. Ҳар гурӯҳ алоҳида гузориш дода мешавад, ки ба шумо имкон медиҳад майдонҳоеро ба монанди сол, моҳ ва рӯз аз сана истихроҷ кунед.
