\s și \S (spații albe) în Expresii Regulare (RegEx)

Clase de caractere PCRE / ECMAScript / Python

Potrivește orice caracter de spațiere: spațiu, tab, linie nouă (\s) sau orice caracter vizibil (\S).

Tipar RegEx
s   |   s+   |   S+   |   [sS]*

Ce face \s și \S (spații albe)

Clasa \s (de la whitespace) potrivește orice caracter de spațiere albă: spațiul obișnuit ( ), tabulatorul orizontal (\t), trecerea pe linie nouă (\n), returul de car (\r), form feed (\f) și vertical tab (\v).

Opusul său, \S (non-whitespace), potrivește orice caracter care nu este spațiu alb (litere, cifre, punctuație). Combinația \s+ este extrem de utilă pentru normalizarea spațiilor multiple dintr-un text, iar \S+ este cea mai rapidă metodă de a extrage „cuvinte” separate prin spații (indiferent ce simboluri sau diacritice conțin).

Variante și sintaxă asociată

Expresie / Simbol Descriere
\s Un singur caracter de spațiu alb: [ \t\r\n\f\v].
\S Orice caracter vizibil (non-whitespace): [^ \t\r\n\f\v].
\s+ Unul sau mai multe spații, tab-uri sau linii noi consecutive.
\S+ Un grup continuu de caractere fără spații (ex. un token sau un URL dintr-un text).
^\s+|\s+$ Spațiile de la începutul sau sfârșitul unui șir (implementarea clasică pentru trim).
[\s\S]* Absolut orice caracter, inclusiv linii noi (alternativă clasică la .* cu flag-ul s).

Exemple

Exemplul 1: Înlocuirea spațiilor duble și a tab-urilor cu un singur spațiu

Expresia \s+ comprimă secvențele de spații, tab-uri și newline-uri într-un singur spațiu.

// PHP:
$text = "Acesta   este\tun   text\ncu   spații   neregulate.";
$curat = preg_replace('/\s+/', ' ', trim($text));

Potriviri găsite (Matches)

"Acesta este un text cu spații neregulate."

Exemplul 2: Împărțirea unui text în token-uri vizibile cu \S+

Spre deosebire de \w+, \S+ păstrează laolaltă diacriticele, cratimele și punctuația lipită de cuvânt.

Expresie: /\S+/g
Text:     "Bună,   lume! Preț: 49,99 lei."

Potriviri găsite (Matches)

Match 1: "Bună,"
Match 2: "lume!"
Match 3: "Preț:"
Match 4: "49,99"
Match 5: "lei."

Greșeli frecvente

  • Folosirea lui \s atunci când vrei să potrivești doar spații orizontale pe același rând, fără a uni rândurile între ele (deoarece \s include și \n!). Pentru doar spațiu și tab, folosește [ \t]+ sau în PCRE \h+ (horizontal whitespace).
  • Uitarea caracterului non-breaking space (\u00A0 /  ) în PCRE fără flag-ul /u: în ASCII simplu, \s nu potrivește  .

Simboluri și rețete înrudite