Modul Extins Verbose în RegEx ((?x) / Flag-ul x) și Documentarea Șabloanelor în Expresii Regulare (RegEx)

Grupare și Lizibilitate PCRE / Python re.VERBOSE / Perl

Ghid complet pentru modul Verbose / Extended (flag-ul x sau (?x)) în RegEx: transformarea expresiilor regulate opace în cod curat, aerisit, indentat și documentat cu comentarii.

Tipar RegEx
(?x)
  ^                     # Inceput de text
  (?P<prefix>\d{3})      # Prefix
  $

Expresiile regulate sunt adesea criticate că ar fi „write-only code” — un șir dens și indescifrabil de caractere speciale pe care nici măcar autorul nu îl mai înțelege după 3 luni. Modul Extins (Verbose / Extended Mode), activat prin flag-ul x sau modificatorul inline (?x), rezolvă definitiv această problemă, permițând formatarea expresiilor ca pe un cod sursă obișnuit.

RegEx Opace vs. RegEx Verbose Documentat
# EXPRESIE REGULARĂ OBIȘNUITĂ (OPACĂ ȘI GREU DE ÎNȚELES):
^(?:\+?4)?07\d{8}$

# ACEEAȘI EXPRESIE REGULARĂ ÎN MODUL EXTINS (re.VERBOSE / (?x)):
(?x)
^                       # Începutul numărului de telefon
(?:
    \+? 4              # Prefixul internațional opțional al României (+4 sau 4)
)?
07                      # Toate numerele mobile din România încep cu 07
\d{8}                   # Urmează exact 8 cifre suplimentare
$                       # Sfârșitul numărului

Cum Tratează Motorul Spațiile în Modul Verbose?

  1. Spațiile albe sunt ignorate: Spațiile simple, tab-urile și liniile noi folosite pentru indentare nu sunt considerate parte din șablonul căutat.
  2. Comentarii cu diez (#): Orice text apărut după caracterul # până la sfârșitul liniei respective este ignorat complet de motor.
  3. Cum potrivim un spațiu real în mod verbose? Dacă doriți să căutați un spațiu literal, folosiți \s, [ ] sau \ (escapat cu backslash).
Exemplu în Python cu re.VERBOSE
import re

pattern_email = re.compile(r'''
    ^
    (?P [a-zA-Z0-9._%+-]+ )  # Numele contului de utilizator
    @                                   # Simbolul obligatoriu arond
    (?P    [a-zA-Z0-9.-]+ )     # Numele domeniului
    \.                                 # Punctul despărțitor
    (?P        [a-zA-Z]{2,} )       # Extensia TLD (ro, com, org)
    $
''', re.VERBOSE)

match = pattern_email.match("suport@dexblog.ro")
if match:
    print("Domeniu:", match.group('domeniu')) # "dexblog"