Modificatori de Mod și Flag-uri Inline în RegEx ((?i), (?m), (?s)) în Expresii Regulare (RegEx)

Aserțiuni Avansate PCRE / Python / Java

Ghid complet pentru modificatori inline în RegEx: activarea și dezactivarea comportamentului flag-urilor direct în interiorul șablonului text fără a afecta restul expresiei.

Tipar RegEx
(?i)prefix_(?-i)exact_case | (?s)text_cu_newline.*

În majoritatea limbajelor de programare, flag-urile (cum ar fi i pentru case-insensitive sau s pentru dotAll) sunt transmise ca un parametru global care se aplică asupra întregii expresii regulate (de exemplu: /model/i). Cu toate acestea, de multe ori doriți ca doar o mică porțiune din șablon să ignore majusculele, în timp ce restul șablonului să rămână strict case-sensitive. Modificatorii Inline de Mod permit acest control fin.

Sintaxa modificatorilor inline de mod
(?i)    # Activează modul case-insensitive de la acest punct înainte
(?-i)   # Dezactivează modul case-insensitive de la acest punct înainte

// Exemplu practic: Prefixul este flexibil, dar codul de securitate este strict:
(?i)token_(?-i)[A-Z0-9]{8}

// Șiruri potrivite:
// "token_AB12CD34" -> VALID
// "TOKEN_AB12CD34" -> VALID
// "token_ab12cd34" -> RESPINS! (codul de după (?-i) cere strict majuscule!)

Modificatori Scopați (Scoped Modifiers)

O sintaxă și mai curată suportată în motoare moderne precum PCRE2, Python 3.11+ și Java este aplicarea modificatorului doar în interiorul unei paranteze:

(?i:text_case_insensitive)text_normal

# "text_case_insensitive" se potrivește indiferent de majuscule/minuscule,
# iar la ieșirea din paranteză motorul revine automat la comportamentul standard!

Lista Celor Mai Folosiți Modificatori Inline

  • (?s): Activează modul dotAll (punctul . se potrivește și cu \n). Ideal de pus la începutul șabloanelor complexe în limbaje unde nu aveți acces ușor la flag-ul global.
  • (?m): Activează modul multiline (^ și $ ancorează per linie).
  • (?x): Activează modul extended / verbose (permite spații și comentarii cu #).