\ (escaparea caracterelor speciale) în Expresii Regulare (RegEx)

Cuantificatori (repetiții) PCRE / ECMAScript / POSIX

Anulează rolul special al metacaracterelor RegEx (. + * ? ^ $ ( ) [ ] { } | \) pentru a le căuta ca text literal.

Tipar RegEx
.   ?   +   *   (   )   [   ]   \   /

Ce face \ (escaparea caracterelor speciale)

În expresiile regulare există 12 metacaractere cu rol special în afara parantezelor drepte: \ ^ $ . | ? * + ( ) [ { (plus delimitatorul expresiei, de obicei /). Dacă vrei să cauți oricare dintre aceste simboluri ca text propriu-zis (literal) — de exemplu semnul + într-un număr de telefon +40, $ într-un preț $100 sau ? într-o întrebare — trebuie să pui un backslash (\) în fața lui.

Atunci când construiești expresii regulare dinamic dintr-un input al utilizatorului, nu încerca să escapezi manual caracterele: folosește funcția nativă a limbajului, precum preg_quote($str, '/') în PHP, re.escape(s) în Python sau RegExp.escape(s) în JavaScript modern.

Variante și sintaxă asociată

Expresie / Simbol Descriere
\. \? \+ \* Potrivește caracterele literale punct (.), semnul întrebării (?), plus (+), asterisc (*).
\( \) \[ \] \{ \} Potrivește paranteze rotunde, drepte sau acolade literale.
\^ \$ \| Potrivește simbolurile literale circumflex (^), dolar ($) și bară verticală (|).
\\ Potrivește un singur caracter backslash (\) literal (ex. în căi Windows C:\Users).
\/ Escapează slash-ul (/) atunci când expresia este delimitată de /…/.
\Q...\E În PCRE (PHP): tot ce se află între \Q și \E este tratat automat ca text literal.

Exemple

Exemplul 1: Potrivirea unei operații matematice sau a unui preț cu simboluri speciale

Căutăm expresia 1 + 1 = 2? și prețul $49.99 (TVA inclus) escapând metacaracterele.

Expresie 1: /1 \+ 1 = 2\?/
Expresie 2: /\$\d+\.\d{2} \(TVA inclus\)/
Text:       "Calcul: 1 + 1 = 2? Preț total: $49.99 (TVA inclus)."

Potriviri găsite (Matches)

Expresie 1 potrivește: "1 + 1 = 2?"
Expresie 2 potrivește: "$49.99 (TVA inclus)"

Exemplul 2: Escaparea automată a unui șir dinamic în PHP și JavaScript

Când cauți un termen introdus de utilizator (ex. C++ (2026)), escapează-l înainte de a-l interpola în RegEx.

// PHP:
$termen = 'C++ (2026)';
$pattern = '/' . preg_quote($termen, '/') . '/i'; // devine: /C\+\+ \(2026\)/i

// JavaScript (funcție utilitară clasică):
const escapeRegExp = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');

Potriviri găsite (Matches)

Pattern generat: /C\+\+ \(2026\)/i
Potrivește exact textul literal: "C++ (2026)"

Greșeli frecvente

  • În PHP sau Python, când scrii o expresie în ghilimele duble ("\d+"), limbajul consumă primul backslash înainte ca motorul RegEx să primească șirul! Pentru a căuta un backslash literal în PHP cu preg_match, în ghilimele simple trebuie să scrii '/\\\\/'. Folosește pe cât posibil nowdoc sau în Python raw strings (r"...").
  • Escaparea unor litere obișnuite (ex. \a, \k, \p): în RegEx, backslash pus în fața unei litere creează o secvență specială sau aruncă eroare de sintaxă (mai ales cu flag-ul /u).

Simboluri și rețete înrudite