preg_last_error / preg_last_error_msg în PHP

Expresii regulate PHP 5.2+ (preg_last_error_msg: PHP 8.0+)

Returnează codul (preg_last_error) sau mesajul (preg_last_error_msg) erorii produse de ultima funcție preg_.

Sintaxă
preg_last_error(): int

Ce face preg_last_error / preg_last_error_msg

Funcțiile preg_ returnează false sau null când întâlnesc o eroare la rulare, de exemplu un text UTF-8 invalid cu modificatorul u sau un șablon prea costisitor. Ca să afli motivul, apelezi imediat după preg_last_error (un cod, de exemplu PREG_BAD_UTF8_ERROR) sau preg_last_error_msg (un mesaj în engleză).

Fără eroare, codul este PREG_NO_ERROR (0) și mesajul "No error".

Ce returnează

preg_last_error: codul erorii. preg_last_error_msg: mesajul.

Exemple

Exemplul 1: Text UTF-8 invalid

<?php
$taiat = substr("Iași", 0, 3);

var_dump(preg_match('/\w+/u', $taiat));
var_dump(preg_last_error() === PREG_BAD_UTF8_ERROR);
echo preg_last_error_msg() . "\n";

preg_match('/\w+/u', "Iași");
echo preg_last_error_msg();

Rezultat

bool(false)
bool(true)
Malformed UTF-8 characters, possibly incorrectly encoded
No error

Exemplul 2: Șablon care depășește limita de calcul

Șablonul încearcă prea multe variante până să decidă că nu se potrivește și depășește limita pcre.backtrack_limit.

<?php
$rezultat = preg_match('/(?:\D+|<\d+>)*[!?]/', "foobar foobar foobar");
var_dump($rezultat);
echo preg_last_error_msg();

Rezultat

bool(false)
Backtrack limit exhausted

Greșeli frecvente

  • Tratezi false de la preg_match ca „nu s-a potrivit”. 0 înseamnă fără potrivire, false înseamnă eroare: verifică cu === false și citește preg_last_error_msg().

Comenzi înrudite

  • preg_match: Verifică dacă un text se potrivește cu o expresie regulată și extrage prima potrivire.
  • mb_check_encoding: Verifică dacă un text este valid într-o anumită codare, de exemplu dacă este UTF-8 corect.
  • preg_replace: Înlocuiește toate potrivirile unei expresii regulate cu alt text.