Tástáil slonn rialta

tástálann sé slonn rialta (regex) ar théacs agus taispeánann sé na meaitseanna agus na grúpaí gafa

Cén úsáid a bhaintear as tástálaí slonn rialta?

Ligeann tástálaí regex duit seiceáil go bhfuil patrún slonn rialta (regex) ag teacht leis leis an téacs a bhfuiltear ag súil leis, gan an cód feidhmchláir a sheoladh. Déanaimid an patrún a ghreamú, déanaimid an téacs ionchuir a ghreamú, déanaimid seiceáil na roghanna (bratacha), agus taispeánann an uirlis liosta na meaitseanna a aimsíodh láithreach chomh maith leis na grúpaí a gabhadh. Is é seo an coibhéis ar líne de preg_match_all() i PHP, ó String.matchAll() i JavaScript nó re.findall() i Python.

Tá regexes cumhachtach agus casta araon. Camóg, lúibíní caillte, cainníochtaí glutton a sucks suas an iomarca carachtair: agus an teaghrán bhaintear a thuilleadh mar a bhí súil againn. An tástálaí seachnaíonn sé an turas cruinn le heagarthóir, críochfort agus comhad tástála: athráimid an patrún go dtí go bhfeicimid an toradh maith.

Conas an patrún a scríobh?

Cuir isteach an regex gan teorainneacha. Níl /.../, gan #...#. Mar shampla, chun seoltaí ríomhphoist a ghabháil ó théacs, níl le déanamh ach dul isteach [\w.+-]+@[\w-]+\.[\w.-]+. Tá roghanna (bratacha) á rialú ag ticbhoscaí.

Seiceáiltear an rogha u (Unicode) de réir réamhshocraithe. Tá sé beagnach i gcónaí ag teastáil: gan é, Ní aithníonn \w variant, agus cuireann roinnt patrún earráid chiúin PCRE ar aghaidh UTF-8 teaghráin.

Roghanna PCRE

  • i (cás-íogair): Aithníonn [a-z] litreacha móra freisin.
  • m (illíne): meaitseálann ^ agus $ tús agus foircinn gach líne, móide tús agus deireadh na teaghrán iomlán.
  • s (dotall): Aithníonn . sosanna líne freisin. Úsáideach le haghaidh patrúin a chaithfidh altanna a thrasnú.
  • u (unicode): léirmhíníonn an patrún agus an t-ábhar in UTF-8. Riachtanach chomh luath leis an téacs ina bhfuil carachtair neamh-ASCII (variant, emoji, ideograms).

Samplaí Coiteann Regex

  • Seoladh ríomhphoist: [\w.+-]+@[\w-]+\.[\w.-]+ (foirm shimplithe, is leor do cásanna is praiticiúla; dian RFC 5322 an-chasta).
  • URL HTTP/HTTPS: https?://[\w.-]+(?:/[\w./?%&=-]*)?
  • Uimhir theileafóin na Fraince: (?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4}
  • Cód poist na Fraince: \d{5}
  • Dáta ISO (BBBB-MM-DD): \d{4}-\d{2}-\d{2}
  • Seoladh IPv4: (?:\d{1,3}\.){3}\d{1,3}
  • Focal iomlán: foo (seachnaíonn na teorainneacha focal meaitseáil peil).
  • Haischlib: #\w+
  • Uimhir leagan shéimeantach: \d+\.\d+\.\d+(?:-[\w.-]+)?
  • Aitheantas Twitter / X: @\w{1,15}

Grúpaí gafa

Is féidir le grúpaí i lúibíní a bheith i regex, a leithlisíonn cuid den mheaitseáil le haghaidh athúsáide. Mar shampla, gabhann an patrún (\w+)@(\w+\.\w+) a cuireadh i bhfeidhm ar alice@example.com dhá cheann grúpaí: alice agus example.com. Taispeánann an uirlis na grúpaí seo i gcolún tiomnaithe, in aice le gach cluiche. Tá grúpaí ainmnithe ((?P ...)) ann freisin liostaithe, innéacsaithe de réir ainm.

A ghrúpáil gan ghabháil (úsáideach chun cainníochtaí a chur i bhfeidhm gan an liosta grúpaí a thruailliú), ní mór dúinn úsáideann (?:...).

Cosaint ar ReDoS

Is féidir le hinneall PCRE PHP dul isteach chúlrianú tubaisteach ar chúiseanna paiteolaíocha áirithe: is féidir patrún cosúil le (a+)+$ a chur i bhfeidhm ar theaghrán fada neamhchríochnaithe a an freastalaí ar feadh roinnt soicind. Chun an sloinneadh rialta a shéanadh seirbhíse a sheachaint (ReDoS), tá dhá theorainn i bhfeidhm ag an uirlis:

  • a set_time_limit(2) ar thaobh an oibrí (torthaí á bpróiseáil tar éis 2 shoicind);
  • laghdaigh pcre.backtrack_limit go 100,000, rud a fhágann go dteipeann ar phatrúin go tapa a dhéanann iniúchadh ar an iomarca comhcheangail.

I gcás cúis róchostasach, taispeánann an uirlis an teachtaireacht earráide PCRE (preg_last_error_msg()), de ghnáth ídíodh teorainn an chúltaca. Athfhrása do patrún ag úsáid cainníochtaithe sealbhacha (a++) nó grúpaí adamhacha ((?>...)) chun cúlrianú a sheachaint.

Ceisteanna coitianta

Cén fáth nach bhfuil mo regex mar a chéile cé go n-oibríonn sé i JavaScript?

Is é PCRE (PHP) inneall na huirlise seo, gar do Perl. Tá an chomhréir an-chosúil le JavaScript ach tá roinnt gnéithe difriúil: lookbehinds d'fhad athraitheach, ailiasanna áirithe Unicode, nó láimhseáil réamhshocraithe íogaireacht cáis. Má tá sé ar intinn agat an taobh patrún a rith bhrabhsálaí, tástáil freisin i dtimpeallacht JS.

Cén fáth nach nglacann mo \w variant?

Gan an bhratach u, ní aithníonn \w ach [A-Za-z0-9_]. Le u (Unicode), aithníonn sé gach litir sa chiall UCD, lena n-áirítear carachtair accented. Chun dul níos faide, bain úsáid as ranganna Unicode: \p{L} (litir), \p{N} (uimhir), \p{P} (poncaireacht).

An gcaomhnaíonn an uirlis mo théacs?

Déanann an t-oibrí PHP an patrún agus an t-ábhar a phróiseáil i RAM, gan marthanacht. Gan sonraí nach bhfuil curtha isteach logáilte.

Cad ba cheart dom a dhéanamh má fhaighim teachtaireacht "Tá teorainn an chúlrian ídithe"?

Téann do phatrún ar ais agus amach i bhfad ró. Cuardaigh chainníochtóirí neadaithe den chineál (a+)+(\w+)*, ar cásanna tipiciúla iad de ReDoS. Cuir ceann amháin ina ionad foirm gan athbhrí: mar shampla \w+ in ionad (\w+)*.

An féidir liom patrún illíne a thástáil?

Tá. Seiceáil an rogha m ionas go n-aithneoidh ^ agus $ na túsanna agus foircinn gach líne. Ina theannta sin seiceáil s más mian leat . a thrasnú briseadh líne.

Sampla iarratais

curl -X POST https://cdrn.fr/api/v1/tools/regex-tester/execute \
  -H "Content-Type: application/json" \
  -d '{"pattern":"...","subject":"...","flag_i":false,"flag_m":false,"flag_s":false,"flag_u":true}'

Scéimre ionchuir

Réimse Cineál Riachtanach Réamhshocrú
pattern string
subject text
flag_i boolean false
flag_m boolean false
flag_s boolean false
flag_u boolean true

Críochphointí

  • GET https://cdrn.fr/api/v1/tools - liostaíonn na huirlisí go léir atá ar fáil
  • GET https://cdrn.fr/api/v1/tools/regex-tester - faigh scéimre na huirlise seo
  • POST https://cdrn.fr/api/v1/tools/regex-tester/execute - rith an uirlis seo le pálasta JSON