^ și $ (început și sfârșit de șir / linie) în Expresii Regulare (RegEx)

Ancore și limite PCRE / ECMAScript / POSIX

Ancorează potrivirea la începutul (^) și/sau la sfârșitul ($) șirului de text sau al fiecărui rând.

Tipar RegEx
^pattern   |   pattern$   |   ^pattern$   |   A...z

Ce face ^ și $ (început și sfârșit de șir / linie)

Simbolurile ^ (circumflex) și $ (dolar) sunt ancore de poziție: ele nu consumă niciun caracter din text, ci verifică doar că motorul RegEx se află exact la începutul șirului (^), respectiv la sfârșitul șirului ($).

În orice validare de formular (email, telefon, CNP, parolă), folosirea ambelor ancore (^...$) este obligatorie: fără ele, o expresie precum /\d{13}/ va returna true și pentru textul "abc 1900101123456 xyz", deoarece conține undeva în interior 13 cifre! Cu flag-ul m (multiline) activat, ^ și $ potrivesc începutul și sfârșitul fiecărui rând în parte.

Variante și sintaxă asociată

Expresie / Simbol Descriere
^ Începutul întregului șir de text (sau începutul liniei curente dacă flag-ul m este activ).
$ Sfârșitul întregului șir de text (sau sfârșitul liniei curente cu flag-ul m).
^...$ Forțează ca întregul șir de la cap la coadă să respecte șablonul (esențial la validări).
^\s*$ Potrivește o linie complet goală sau care conține doar spații albe.
\A și \z În PCRE (PHP) și Python (\Z): începutul și sfârșitul absolut al șirului, ignorând flag-ul m și \n final.

Exemple

Exemplul 1: Diferența critică la validare: cu și fără ^…$

Observă cum fără ancore, o expresie de validare acceptă orice text parazit înainte sau după porțiunea validă.

Expresie parțială (GREȘIT pentru validare): /\d{4}-\d{2}-\d{2}/
Expresie ancorată (CORECT pentru validare): /^\d{4}-\d{2}-\d{2}$/

Input 1: "2026-10-23"
Input 2: "Data comenzii: 2026-10-23 (livrare mâine)"

Potriviri găsite (Matches)

Pe Input 1 ("2026-10-23"):
  Ambele expresii returnează TRUE.

Pe Input 2 ("Data comenzii: 2026-10-23 (livrare mâine)"):
  /\d{4}-\d{2}-\d{2}/   -> TRUE  (găsește data în mijlocul textului!)
  /^\d{4}-\d{2}-\d{2}$/ -> FALSE (respinge corect inputul fiindcă nu conține DOAR data)

Exemplul 2: Extragerea liniilor de comentariu cu ^ și flag-ul m (multiline)

Cu flag-ul m, ^#.*$ selectează fiecare linie care începe cu # dintr-un fișier de configurare.

Expresie: /^#.*$/gm
Text:
# Configurare bază de date
host = localhost
# Portul implicit PostgreSQL
port = 5432

Potriviri găsite (Matches)

Match 1: "# Configurare bază de date"
Match 2: "# Portul implicit PostgreSQL"

Greșeli frecvente

  • În PCRE (PHP preg_match), ancora $ potrivește și poziția chiar înainte de un \n final! Astfel, /^\d+$/ în PHP returnează 1 pentru "12345\n". Pentru validări de securitate stricte în PHP, folosește \A și \z (ex. /\A\d+\z/) sau flag-ul D (PCRE_DOLLAR_ENDONLY).
  • Folosirea lui ^ cu alternare fără paranteze: ^cat|dog$ înseamnă „începe cu cat SAU se termină cu dog”, nu „este exact cat sau dog”. Scrie mereu ^(?:cat|dog)$.

Simboluri și rețete înrudite

  • \b și \B (limită de cuvânt): Potrivește poziția de graniță dintre un cuvânt și un non-cuvânt (\b) sau o poziție din interiorul cuvântului (\B).
  • Flag-uri RegEx: g, i, m, s, u, x: Modificatori globali care schimbă modul de evaluare a expresiei: căutare multiplă (g), insensibil la majuscule (i), multi-linie (m), Unicode (u).
  • | (operatorul SAU / alternare): Permite alegerea între două sau mai multe expresii alternative (SAU logic în RegEx).
  • [^...] (set negat): Potrivește orice caracter care NU se află în lista sau intervalul dintre parantezele drepte.