Referință – Ce înseamnă acest regex? (Programare, Regex)

Ce este acest regex?

Aceasta este o colecție de întrebări și răspunsuri comune. Acesta este, de asemenea, un Wiki al comunității, așa că toată lumea este invitată să participe la menținerea lui.

De ce este aceasta?

suferă de dă-mi codul tip de întrebări și răspunsuri slabe, fără nicio explicație. Această referință este menită să furnizeze linkuri către întrebări și răspunsuri de calitate.

Care este domeniul de aplicare?

Această referință este destinată următoarelor limbaje: , , , , , , , , , , , , .

S-ar putea să fie prea larg, dar aceste limbaje au aceeași sintaxă. Pentru caracteristici specifice există tag-ul limbajului din spatele acestuia, de exemplu:

  • Ce sunt expresiile regulate Grupuri de echilibrare?

Comentarii

  • Am creat o meta discuție, toată lumea este invitată >>> –  > Por HamZa.
1 răspunsuri

Întrebări frecvente despre expresiile regulate de la Stack Overflow Regular Expressions

Vezi și o mulțime de sfaturi generale și link-uri utile la pagina de detalii despre tag-uri.


Tutoriale online

Cuantificatori

  • Zero-sau-mai-mult: *:greedy, *?:reticent, *+:posesiv
  • Unul sau mai mult: +:lacom, +?:reticent, ++:posesiv
  • ?:opțional (zero sau unu)
  • Intervale min/max (toate inclusiv): {n,m}:între n & m, {n,}:n-sau-mai-mult, {n}:exact n
  • Diferențe între cuantificatorul lacom, reticent (cunoscut și ca „lazy”, „ungreedy”) și posesiv:
    • Cuantificatori lacomi vs. reticenți vs. posesivi
    • Discuție aprofundată despre diferențele dintre cuantificatorii lacomi și non-lacomi
    • Care este diferența dintre {n} și {n}?
    • Poate cineva să-mi explice cuantificatorii posesivi? , , , , , ,
    • Emularea cuantificatorilor posesivi
    • Referințe care nu țin de depășirea stivei: De la Oracle, , regular-expressions.info

Clase de caractere

  • Care este diferența dintre paranteze pătrate și paranteze?
  • [...]: un caracter oarecare, [^...]: negat/ orice caracter, dar
  • [^] se potrivește cu orice caracter inclusiv linii noi
  • [w-[d]] / [a-z-[qz]]: scădere de seturi , , , , , , JGSoft
  • [w&&[^d]]: intersecție de seturi , , 1.9+
  • [[:alpha:]]:clase de caractere POSIX
  • De ce [^\D2], , [^[^0-9]2], , [^2[^0-9]] obțin rezultate diferite în Java?
  • Prescurtare:
    • Cifra: d:digit, D:non-digit
    • Caracter de cuvânt (literă, cifră, subliniere): w:caracter cuvânt, W:caracter fără cuvânt
    • Spațiu alb: s:spațiu alb, S:non-whitespace
  • Categorii Unicode (p{L}, P{L}, , etc.)

Secvențe de evacuare

  • Spațiu alb orizontal: h:space-or-tab, t:tab
  • Linii noi:
    • r, ,
      :revenire la cărămidă și avans de linie
    • R:generic newline
  • Secvențe de spații albe negate: H:Caracter de spațiu alb neorizontal, V:Caracter de spațiu alb non-vertical, N:Caracterul care nu este un salt de linie
  • Altele: v:tabulare verticală, e:caracterul de scăpare

Ancore

  • ^:începutul liniei/intrare, b:limită de cuvânt, și B:limită fără cuvânt, $:sfârșitul liniei/al intrării
  • A:început de intrare, Z:sfârșit de intrare , , , ,
  • z:chiar la sfârșitul intrării (Z în Python) , , , , , , , , , , , , , ,
  • G:începutul meciului , , , ,

(A se vedea și „Flavor-Specific Information → Java → Funcțiile din Matcher„)

Grupuri

  • (...)Grupul :capture, (?:):non-capture group
    • De ce grupul meu de captare repetată captează doar ultima potrivire?
  • 1:backreference și referința grupului de captură, $1:referire la grupul de captură
    • Care este semnificația unui număr după o backslash într-o expresie regulată?
    • g<1>123:Cum se urmărește un grup de captură numerotat, cum ar fi 1, , cu un număr?:
  • Ce înseamnă un subpattern (?i:regex) înseamnă un subpatron?
  • Ce înseamnă „P” în (?P<group_name>regexp) înseamnă „P”?
  • (?>):grup atomic sau grup independent, (?|):resetare a ramurii
    • Echivalentul lui branch reset în .NET/C#
  • Grupuri de captură numite:

Soluții de căutare

  • Căutări: (?=...):pozitiv, (?!...):negative
  • Lookbehinds: (?<=...):pozitive, (?<!...):negative (nu este suportat de )
  • Limitele Lookbehind în:
    • Lookbehinds trebuie să fie de lungime constantă , , , , , ,
    • Soluții de căutare de lungime limitată {0,n}
    • Sunt permise lookbehind-uri de lungime variabilă
  • Alternative la lookbehind-uri:
    • Utilizarea K , , (Variantele care acceptă K)
    • Modul regex alternativ pentru Python

Modificatori

steag modificator arome
c poziția curentă
e expresie
g global cel mai mult
i fără distincție între majuscule și minuscule most
m multiline
m (non)multiline
o o dată
S studiu
s o singură linie nesuportat: (soluție de rezolvare) |
U ungreedy
u unicode most
x extins cu spații albe most
y lipicios
  • Cum se convertește preg_replace e în preg_replace_callback?
  • Ce sunt modificatorii inline?
  • Ce este „?-mix” într-o expresie regulată Ruby?

Altele:

  • |:operator de alternanță (OR), .:orice caracter, [.]:caracter literal punct
  • Ce caractere speciale trebuie să fie scăpate?
  • Verbe de control ( și ): (*PRUNE), , (*SKIP), , (*FAIL) și (*F)
    • numai: (*BSR_ANYCRLF)
  • Recursiune ( și ): (?R), , (?0) și (?1), , (?-1), , (?&groupname)

Sarcini comune

  • Obțineți un șir de caractere între două paranteze curbe: {...}
  • Potriviți (sau înlocuiți) un model, cu excepția situațiilor s1, s2, s3…
  • Cum găsesc toate ID-urile video YouTube într-un șir folosind un regex?
  • Validare:
    • Internet: adrese de e-mail, URL-uri (gazdă/port: regex și alternative non-regex), parole.
    • Numeric: un număr, intervale min-max (cum ar fi 1-31), numere de telefon, date
    • Parsarea HTML cu regex: Consultați „Informații generale > Când nu trebuie să folosiți Regex”

Regex-Fu avansat

  • Șiruri de caractere și numere:
    • Expresie regulată pentru a potrivi o linie care nu conține un cuvânt
    • Cum detectează acest model PCRE palindromurile?
    • Potriviți șirurile a căror lungime este o a patra putere
    • Cum găsește acest regex numerele triunghiulare?
    • Cum se determină dacă un număr este un număr prim cu regex?
    • Cum se potrivește caracterul din mijloc într-un șir de caractere cu regex?
  • Altele:
    • Cum putem potrivi a^n b^n?
    • Potrivirea parantezelor imbricate
      • Utilizarea unui model recursiv , ,
      • Utilizarea grupurilor de echilibrare
    • Potrivire regex „verticală” într-o „imagine” ASCII
    • Lista întrebărilor regex foarte votate pe Code Golf
    • Cum să faci ca doi cuantificatori să se repete de același număr de ori?
    • O expresie regulată imposibil de potrivit: (?!a)a
    • Potrivire/eliminare/înlocuire this cu excepția contextelor A, B și C
    • Potriviți parantezele imbricate cu regex fără a utiliza recursivitate sau grupuri de echilibrare?

Informații specifice unei anumite arome

(Cu excepția celor marcate cu *, , această secțiune conține linkuri care nu sunt legate de Stack Overflow).

Informații generale

(Legăturile marcate cu * sunt linkuri care nu sunt de la Stack Overflow).

Exemple de regex care pot face ca motorul regex să eșueze

  • De ce această expresie regulată ucide motorul regex Java?

Instrumente: Testeri și explicatori

(Această secțiune conține linkuri care nu sunt de la Stack Overflow).

Comentarii

  • Înrudite: Întrebarea pentru care un răspuns începe cu „Nu poți analiza [X]HTML cu regex.”. –  > Por Peter Mortensen.
  • Perl are mai multe ((?( pentru condițional, de exemplu), dar puteți citi în schimb documentația oficială perl. –  > Por user202729.

Tags: