← Dukan kayan aiki

Mai Gwada Regex

Gina, gwada kuma gyara maganganun tsari kai tsaye a kan rubutunka a bincike. Koyi rukunin haruffa, adadi, ma'auni, kungiyoyi da alamomi.

Mai Gwada Regex: gina da gyara ƙirar bincike bisa nassinka

Furcin yau da kullum (regular expression) wani ƙaramin harshe ne na bayyana siffar nassi. Maimakon tambaya "shin ainihin wannan kalma tana nan?", regex tana bar ka ka tambaya "shin akwai jerin haruffa da yake kama da wannan?" Wannan shi ne yake sanya ta da ƙarfi domin nema, tabbatarwa, fitarwa, da maye gurbin nassi a cikin masu gyara lamba, fayilolin log, shigarwar fom, da rubutattun umarni (scripts). Haka kuma shi ne yake sauƙaƙa yin kuskure, domin ƙira da take kama daidai a kanka na iya ɓoye-ɓoye ta kama fiye da kima, ƙasa da kima, ko babu komai.

Wannan shi ne dalilin da ya sa gwadawa cikin hulɗa ta fi hasashe. Idan ka rubuta ƙira ka kalli daidaitawa suna haske a kan ainihin misalin nassi, kana samun amsa nan take: ka ga abin da aka kama, abin da ya wuce, da kuma waɗanne ƙungiyar kamawa (capture group) ta kama waɗanne gutsure. Mai Gwada Regex ɗinmu yana gudana gaba ɗaya a cikin burauzarka. Ƙirarka da misalin nassinka ba sa taɓa barin shafin, don haka za ka iya mannawa layukan log, imel, ko bayanan aiki na ainihi ba tare da tura komai zuwa wata sabar ba.

Matatar cyan mai haske tana kama alamomi na zinare daga gudan bayanai a bango mai shuɗi mai duhu
Regex tana aiki kamar matatu, tana zaɓar kawai alamomin da suka dace da ƙirarka.

Sinadaran gini da ya kamata ka sani

Mafi yawan ƙirar yau da kullum an haɗa su ne daga ƙananan sinadarai kaɗan. Ka koyi waɗannan sai ka iya karanta mafi yawan regex ɗin da za ka haɗu da su a duniya.

Nau'ukan haruffa (character classes) suna bayyana tarin haruffa da aka yarda da su. [aeiou] tana kama kowace wasali guda, [0-9] tana kama lamba guda, kuma [a-zA-Z] tana kama harafi guda. Alamar caret a cikin baka tana ƙin tarin, don haka [^0-9] tana nufin "duk wata haruffa da ba lamba ba." Gajarce-gajarce suna tseratar da rubutu: \d lamba ce, \w harafi ne na kalma (haruffa, lambobi, underscore), \s sarari ne, kuma tabbatattun dot . tana kama kusan kowace haruffa guda.

Ma'aunin adadi (quantifiers) suna faɗin sau nawa gutsuren da ya gabata zai iya maimaituwa. * tana nufin sifili ko fiye, + tana nufin ɗaya ko fiye, kuma ? tana nufin sifili ko ɗaya (na zaɓi). Domin ƙidayoyi tabbatattu, {3} tana nufin ainihin uku kuma {2,4} tana nufin biyu zuwa huɗu. Don haka \d{4} tana kama shekara mai lambobi huɗu kuma colou?r tana kama rubutu biyu.

Anchors suna manne ƙira zuwa matsayi maimakon haruffa. ^ tana kama farkon nassi, $ tana kama ƙarshen, kuma \b tana nuna iyakar kalma. Ƙira ^Error tana kama layukan da suka fara da "Error" kawai, wanda shi ne ainihin abin da kake so idan kake bincike log.

Ƙungiyoyi (groups) suna naɗe wani ɓangare na ƙira cikin baka, duka domin amfani da ma'aunin adadi ga haruffa da yawa lokaci ɗaya da kuma domin kama nassin da aka daidaita don sake amfani da shi. A cikin (\d{4})-(\d{2})-(\d{2}) kowace ƙungiya tana kama wani sashin kwanan wata da za ka iya fitowa da shi daga baya. Zaɓi (alternation) da bakan alama yana aiki kamar "ko": cat|dog|fish tana kama ɗaya daga cikin kalmomi uku.

Ƙirar da za ka ainihin nema

Ayyuka kaɗan da suke maimaituwa suna rufe mafi yawan ainihin aiki. Domin kama wani abu kama-da-imel, [\w.+-]+@[\w-]+\.[\w.-]+ wata farawa ce mai amfani; cikakken tabbatar da imel bisa ƙa'ida yana da matukar wahala, kuma ƙira mai walwala yawanci shi ne zaɓi mafi kyau domin haskaka masu yiwuwa maimakon ƙin masu amfani.

Domin lambobi, \d+ tana kamo gudajin lambobi, yayin da -?\d+(\.\d+)? take kama korau na zaɓi da alamomin ƴan lamba. Domin yanke sarari na farko da na ƙarshe, ka daidaita ^\s+|\s+$ ka maye gurbinsa da babu komai. Domin nemo kalmomin da suka maimaita, ƙirar backreference \b(\w+)\s+\1\b tana kama kalma sannan ita da kanta, inda \1 take koma zuwa ƙungiyar farko da aka kama.

Kalmomin da aka zaɓa suna haske na zinare kuma aka haskaka su a cikin gudan alamomin nassi na cyan a bango mai shuɗi mai duhu
Haskakawa mai rai yana nuna ainihin waɗanne sassa na nassinka ƙira take dacewa da su.

Alamomi suna canza yadda daidaitawa take aiki

Alamomi (flags) sune sauyawa da suke gyara dukkan ƙirar. Alamar global (g) tana nemo kowace daidaitawa maimakon tsayawa a farkon, wanda shi ne abin da kake so idan kake haskaka duk wani abu da ya faru. Alamar case-insensitive (i) tana sanya error ta dace da "Error" da "ERROR" daidai. Alamar multiline (m) tana canza ^ da $ domin su dace da farko da ƙarshen kowane layi, ba dukkan nassin kaɗai ba, wanda yake da muhimmanci domin aiki kan log layi-da-layi. Sauran alamomi masu amfani sun haɗa da s (dotall, tana bar dot ta dace da sabbin layuka) da u domin cikakken sarrafa Unicode.

Nau'uka suna ɗan bambanta bisa harshe

Regex iyali ne na yare-yare (dialects), ba wata ka'ida guda ɗaya ba. JavaScript, Python, PCRE (PHP), Java, .NET, Go, da Rust suna amincewa da tsattsauran nahawu da ke sama, amma suna bambanta a gefuna: goyon bayan lookbehind, nahawun ƙungiyoyin da aka bai wa suna ((?<name>...) a kan (?P<name>...)), tserar da kayan Unicode, da waɗanne alamomi suke wanzuwa duk suna bambanta. Ƙira da take aiki a wani injin na iya buƙatar ɗan gyara a wani, don haka yana da amfani a gwada bisa nau'in da kake ainihin amfani da shi. Idan ƙirarka ta gyaru sarai, sauran kayan aikin mai haɓakawa da kayan aikin nassi namu za su iya taimaka wa aikin da ke kewaye da tsaftacewa, sarrafawa, da canza bayanan da ka fara dacewa da su.

Tambayoyin da ake yawan yi

Shin ana tura nassina zuwa wata sabar?

A'a. Mai Gwada Regex yana gudana gaba ɗaya a cikin burauzarka. Ƙirarka da misalin nassinka suna zama a na'urarka kuma ba a taɓa turasu ba, don haka yana da aminci ka manna bayanai masu mahimmanci.

Wane nau'in regex ne wannan kayan aikin yake amfani da shi?

Yana amfani da injin regex na JavaScript da yake ciki cikin burauzarka. Tsattsauran nahawu yana kama abin da ka sani daga mafi yawan harsuna, ko da yake wasu abubuwa masu ci gaba suna ɗan bambanta da PCRE, Python, ko .NET.

Menene bambanci tsakanin daidaitawa mai kwaɗayi (greedy) da mai kwance (lazy)?

Ta zaman kaka-gida ma'aunin adadi mai kwaɗayi ne kuma yana kama nassi mafi yawa gwargwadon iko. Ƙara alamar tambaya tana sanya shi mai kwance, don haka yana kama mafi ƙanƙanci gwargwadon iko. Misali, ƙirar dot star tana da kwaɗayi yayin da dot star alamar tambaya take da kwance.

Yaya zan kama tabbatacciyar haruffa ta musamman?

Ka tsere mata da baya-slash. Domin kama ainihin dot, ka rubuta baya-slash dot. Haka yake ga sauran haruffa masu ma'ana kamar baka, alamar plus, da alamar tambaya.

Me ya sa ƙirata ba ta kama komai?

Sanadin gama-gari sun haɗa da rashin alamar global, anchors da suka manne daidaitawa zuwa matsayin da ba daidai ba, haruffa ta musamman da ba a tsere mata ba, ko ma'aunin adadi mai kwaɗayi da yake wuce iyakar da kake tsammani. Gwada gutsure-gutsure domin nemo laifin.

Zan iya kama sassan daidaitawar?

Eh. Naɗe wani sashi na ƙira cikin baka domin ƙirƙirar ƙungiyar kamawa. Kowace ƙungiya ana ba da rahoto daban, wanda yake bar ka ka fitar da fanni kamar shekara, wata, da rana daga kwanan wata.