Regex Tester: kọ́ àti ṣàtúnṣe àwọn ìlànà lòdì sí ọ̀rọ̀ tirẹ
Regular expression (regex) jẹ́ èdè kékeré tí ó ń ṣàpèjúwe ìrísí ọ̀rọ̀. Dípò bíbéèrè pé "ǹjẹ́ ọ̀rọ̀ gan-an yìí wà níhìn-ín?", regex ń jẹ́ kí o béèrè pé "ǹjẹ́ ọ̀rọ̀ kan tí ó dà bí èyí wà?" Ìyẹn ni ohun tí ó mú kí ó lágbára fún wíwá, ìjẹ́rìí, yíyọ, àti pípààrọ̀ ọ̀rọ̀ nínú àwọn olùṣàtúnṣe kóòdù, fáìlì àkọsílẹ̀, ìdáhùn fọ́ọ̀mù, àti àwọn kóòdù kékeré (scripts). Ó tún jẹ́ ohun tí ó mú kí ó rọrùn láti ṣàṣìṣe, nítorí pé ìlànà kan tí ó dà bí ẹni tí ó tọ́ nínú orí rẹ lè yọ̀ọ̀wa kí ó bá púpọ̀ mu, díẹ̀ mu, tàbí kí ó má bá ohunkóhun mu rárá.
Ìyẹn ni ìdí tí ìdánwò lọ́nà tí ó ń bára ẹni sọ̀rọ̀ fi dára ju gbígbìyànjú lásán lọ. Nígbà tí o bá kọ ìlànà kan, tí o sì ń wo bí àwọn ìbámu ti ń dán jáde láàrin ọ̀rọ̀ àpẹẹrẹ gidi, o ń gba ìdáhùn lẹ́sẹ̀kẹsẹ̀: o rí ohun tí a mú, ohun tí ó já kọjá, àti ẹgbẹ́ àkópọ̀ (capture group) tí ó mú ẹ̀ka wo. Regex Tester wa ń ṣiṣẹ́ patapata nínú aṣàwárí rẹ. Ìlànà rẹ àti ọ̀rọ̀ àpẹẹrẹ rẹ kìí kúrò ní ojú-ìwé náà láéláé, nítorí náà o lè fi ìlà àkọsílẹ̀, ímeèlì, tàbí dátà iṣẹ́ gidi sínú rẹ̀ láìfi ohunkóhun ránṣẹ́ sí sáfà kankan.

Àwọn ohun èlò-ìpìlẹ̀ tí ó yẹ kí a mọ̀
Ọ̀pọ̀lọpọ̀ àwọn ìlànà ojoojúmọ́ ni a kọ́ láti inú àkójọ ẹ̀yà kékeré kan. Kọ́ àwọn wọ̀nyí, wàá sì lè ka apá pàtàkì àwọn regex tí o ń bá pàdé lóde ayé gidi.
Ẹ̀ka àmì (character classes) ń ṣàpèjúwe àkójọ àmì tí a gbà láàyè. [aeiou] ń bá fáwẹ́lì kan mu, [0-9] ń bá nọ́mbà kan mu, [a-zA-Z] sì ń bá lẹ́tà kan mu. Àmì caret nínú akolé a máa yí àkójọ padà, nítorí náà [^0-9] túmọ̀ sí "àmì kankan tí kì í ṣe nọ́mbà." Àwọn kúrúkúrú ń fi àkókò pamọ́: \d jẹ́ nọ́mbà, \w jẹ́ àmì-ọ̀rọ̀ (lẹ́tà, nọ́mbà, ìlà-abẹ́), \s jẹ́ àyè òfìfo, àmì dọ́ọ̀tì . sì ń bá ó fẹ́rẹ̀ẹ́ jẹ́ àmì kankan mu.
Àwọn olùkà-iye (quantifiers) ń sọ iye ìgbà tí ẹ̀ka tí ó ṣáájú lè tún ṣe. * túmọ̀ sí odo tàbí síwájú síi, + túmọ̀ sí ọ̀kan tàbí síwájú síi, ? sì túmọ̀ sí odo tàbí ọ̀kan (kìí ṣe dandan). Fún iye gan-an, {3} túmọ̀ sí mẹ́ta gan-an, {2,4} sì túmọ̀ sí méjì sí mẹ́rin. Nítorí náà \d{4} ń bá ọdún tí ó ní nọ́mbà mẹ́rin mu, colou?r sì ń bá ọ̀nà kíkọ méjèèjì mu.
Àwọn ìdúró (anchors) ń fi ìlànà kan sí ipò kan dípò àmì kan. ^ ń bá ìbẹ̀rẹ̀ ọ̀rọ̀ náà mu, $ ń bá ìparí rẹ̀ mu, \b sì ń fi àlà ọ̀rọ̀ hàn. Ìlànà ^Error ń bá àwọn ìlà tí ó bẹ̀rẹ̀ pẹ̀lú "Error" nìkan mu, ìyẹn gan-an ni ohun tí o fẹ́ nígbà tí o bá ń ṣàyẹ̀wò àkọsílẹ̀.
Ẹgbẹ́ (groups) ń fi apá ìlànà kan sínú àmì-akolé, yálà láti fi olùkà-iye sí orí àmì púpọ̀ ní ẹ̀ẹ̀kan tàbí láti mú ọ̀rọ̀ tí ó bá mu fún ìlò lẹ́ẹ̀kan sí i. Nínú (\d{4})-(\d{2})-(\d{2}), ẹgbẹ́ kọ̀ọ̀kan ń mú ẹ̀ka ọjọ́ kan tí o lè yọ jáde lẹ́yìn náà. Ìyàn (alternation) pẹ̀lú àmì pipe ń ṣiṣẹ́ bí "tàbí": cat|dog|fish ń bá ọ̀kan lára ọ̀rọ̀ mẹ́ta náà mu.
Àwọn ìlànà tí wàá lò ní ti gidi
Iṣẹ́ díẹ̀ tí ó ń tún padà ni ó bo apá pàtàkì iṣẹ́ gidi. Láti mú ohun tí ó dà bí ímeèlì, [\w.+-]+@[\w-]+\.[\w.-]+ jẹ́ ibi ìbẹ̀rẹ̀ tí ó wúlò; ìjẹ́rìí ímeèlì kíkún gẹ́gẹ́ bí ìlànà ìṣirò náà nira gidigidi, ìlànà tí ó lọ́rọ̀ díẹ̀ sì sábà máa jẹ́ yíyàn tí ó tọ́ fún fífi àwọn olùdíje hàn dípò kíkọ àwọn olùmúlò sílẹ̀.
Fún nọ́mbà, \d+ ń mú ọ̀wọ́ nọ́mbà, nígbà tí -?\d+(\.\d+)? sì ń bá nọ́mbà òdì àti eléwì kìí ṣe dandan mu. Láti gé àyè òfìfo ní ìbẹ̀rẹ̀ àti ìparí, bá ^\s+|\s+$ mu kí o sì pààrọ̀ rẹ̀ pẹ̀lú ohun kankan. Láti wá àwọn ọ̀rọ̀ tí a ṣe ìlọ́po méjì, ìlànà backreference \b(\w+)\s+\1\b ń bá ọ̀rọ̀ kan tí ó tẹ̀lé ara rẹ̀ mu, níbi tí \1 ti ń tọ́ka padà sí ẹgbẹ́ àkọ́kọ́ tí a mú.

Àwọn àsíá ń yí bí ìbáramu ṣe hù padà
Àsíá jẹ́ ìyí tí ó ń yí gbogbo ìlànà padà. Àsíá global (g) ń wá gbogbo ìbámu dípò dídúró sí ọ̀kan àkọ́kọ́, ìyẹn ni ohun tí o fẹ́ nígbà tí o bá ń fihàn gbogbo ìgbà tí ó farahàn. Àsíá case-insensitive (i) ń mú error bá "Error" àti "ERROR" mu bákan náà. Àsíá multiline (m) ń yí ^ àti $ padà kí wọ́n bá ìbẹ̀rẹ̀ àti ìparí ìlà kọ̀ọ̀kan mu, kìí ṣe gbogbo ọ̀rọ̀ náà nìkan, èyí tí ó ṣe pàtàkì fún iṣẹ́ àkọsílẹ̀ ìlà-fún-ìlà. Àwọn àsíá mìíràn tí ó wúlò ni s (dotall, tí ó ń jẹ́ kí dọ́ọ̀tì bá kúrọ̀-ìlà mu) àti u fún ìṣàkóso Unicode kíkún.
Àwọn ìrísí yàtọ̀síra díẹ̀ láti èdè sí èdè
Regex jẹ́ ìdílé àwọn èdè, kìí ṣe ìwọ̀n kan tí a ti pinnu. JavaScript, Python, PCRE (PHP), Java, .NET, Go, àti Rust fara mọ́ gírámà pàtàkì tí ó wà lókè, ṣùgbọ́n wọ́n yàtọ̀ ní àwọn ẹ̀gbẹ́: àtìlẹ́yìn lookbehind, gírámà ẹgbẹ́-tí-a-fúnní-ní-orúkọ ((?<name>...) lòdì sí (?P<name>...)), àwọn àmì ohun-ìní Unicode, àti àwọn àsíá tí ó wà ń yàtọ̀síra. Ìlànà tí ó ń ṣiṣẹ́ nínú ẹ̀rọ kan lè nílò àtúnṣe kékeré nínú ẹ̀rọ mìíràn, nítorí náà ó tọ́ láti dán an wò lòdì sí ìrísí tí o ń lò gan-an. Nígbà tí o bá ti ṣàtúnṣe ìlànà kan dáadáa, àwọn irinṣẹ́ olùṣàkóso-kọ̀ǹpútà àti olùṣàkóso-ọ̀rọ̀ yòókù wa lè ràn ọ́ lọ́wọ́ pẹ̀lú iṣẹ́ tí ó yí i ká ti fífọ́, ṣíṣàkóso, àti yíyí dátà tí o kàn ṣẹ̀ṣẹ̀ mu padà.
Àwọn ìbéèrè tí a sábà máa ń béèrè
Ṣé a ń fi ọ̀rọ̀ mi ránṣẹ́ sí sáfà?
Rárá. Regex Tester ń ṣiṣẹ́ patapata nínú aṣàwárí rẹ. Ìlànà rẹ àti ọ̀rọ̀ àpẹẹrẹ rẹ ń dúró sórí ẹ̀rọ rẹ, a kìí sì kó wọn lọ, nítorí náà ó jẹ́ àìléwu láti fi dátà tí ó ṣe pàtàkì sínú rẹ̀.
Irú regex wo ni irinṣẹ́ yìí ń lò?
Ó ń lo ẹ̀rọ regex JavaScript tí ó wà nínú aṣàwárí rẹ. Gírámà pàtàkì náà bá ohun tí o mọ̀ láti inú ọ̀pọ̀lọpọ̀ èdè mu, bí ó tilẹ̀ jẹ́ pé àwọn ẹ̀yà tí ó ga jùlọ yàtọ̀ síwọ̀nba díẹ̀ sí PCRE, Python, tàbí .NET.
Kín ni ìyàtọ̀ láàrin ìbámu tí ó jẹ́ àkúrẹmọ̀ (greedy) àti aláìjẹ́-àkúrẹmọ̀ (lazy)?
Ní àkọ́kọ́, àwọn olùkà-iye jẹ́ àkúrẹmọ̀, wọ́n sì ń mú ọ̀rọ̀ tó bí ó ti lè ṣe é. Fífi àmì-ìbéèrè kún un a mú kí wọ́n má bá àkúrẹmọ̀, wọ́n a sì mú ọ̀rọ̀ tó díẹ̀ bí ó ti lè ṣe é. Fún àpẹẹrẹ, ìlànà dọ́ọ̀tì-ìràwọ̀ jẹ́ àkúrẹmọ̀ nígbà tí dọ́ọ̀tì-ìràwọ̀-ìbéèrè kò bá jẹ́ àkúrẹmọ̀.
Báwo ni mo ṣe lè bá àmì àkànṣe kan gan-an mu?
Fi ìlà-yíká (backslash) sá fún un. Láti bá dọ́ọ̀tì gan-an mu, kọ ìlà-yíká dọ́ọ̀tì. Bákan náà ni ó rí fún àwọn àmì mèta mìíràn bíi àmì akolé, àmì-àkọ́, àmì àfikún, àti àmì-ìbéèrè.
Kí ló dé tí ìlànà mi kò fi bá ohunkóhun mu?
Àwọn ohun tí ó sábà máa ń fà á ni àsíá global tí ó sọnù, àwọn ìdúró tí ó fi ìbámu sí ipò tí kò tọ́, àmì àkànṣe tí a kò sá fún, tàbí olùkà-iye àkúrẹmọ̀ tí ó kọjá àlà tí o retí. Dán an wò ní ẹ̀ka kọ̀ọ̀kan láti wá ẹ̀ṣẹ̀ náà.
Ṣé mo lè mú àwọn apá ìbámu náà?
Bẹ́ẹ̀ni. Fi apá kan nínú ìlànà náà sínú àmì akolé láti dá ẹgbẹ́ àkópọ̀. A ń fi ẹgbẹ́ kọ̀ọ̀kan hàn lọ́tọ̀ọ̀tọ̀, èyí tí ó jẹ́ kí o lè yọ àwọn pápá bíi ọdún, oṣù, àti ọjọ́ jáde láti inú ọjọ́ kan.
