Domanda

Ecco un piccolo esempio (scarica, rinomina in .php ed eseguilo nella tua shell):

test.txt

Perché preg_replace restituisce NULL invece della stringa originale?

\ x {2192} è lo stesso di HTML " & amp; rarr; " (& Quot; ? ").

È stato utile?

Soluzione

Dalla documentazione su preg_replace () :

  

Valori di ritorno

     

preg_replace () restituisce un array se il   Il parametro subject è un array o a   stringa altrimenti.

     

Se vengono trovate corrispondenze, il nuovo argomento   verrà restituito, altrimenti soggetto   verrà restituito invariato o NULL se   si è verificato un errore.

Nel tuo modello, non credo che la bandiera u sia supportata. SBAGLIATO

Modifica: sembra una sorta di problema di codifica con l'argomento. Quando cancello '147 3.2 & nbsp; V6 - GTA & (nbsp; 184 & nbsp; kW)' e lo riscrivo manualmente tutto sembra funzionare.

Modifica 2: nel modello che hai fornito, ci sono 3 spazi che sembrano dare problemi al motore regex. Quando li converto in decimali il loro valore è 160 (al contrario dello spazio normale 32). Quando sostituisco quegli spazi con quelli normali sembra funzionare.

Ho sostituito gli spazi offensivi con i trattini bassi di seguito:

'147 3.2 V6 - GTA (184 kW)'
'147 3.2_V6 - GTA_(184_kW)'

Altri suggerimenti

Ho avuto una risposta nulla quando la mia espressione regolare includeva u modificatore UTRE-8 PCRE . Se il testo sorgente è non UTF e hai questo modificatore, otterrai un risultato nullo.

  • Stai usando virgolette singole, il che significa che l'unica cosa a cui puoi sfuggire sono altre virgolette singole. Per abilitare le sequenze di escape (ad es. \ x32 , quindi usa le virgolette doppie " ")
  • Non sono un esperto UTF8, ma neanche il codice di escape \ x2192 non è corretto. Puoi fare: \ x21 \ x92 per inserire entrambi i byte nella tua stringa, ma potresti voler guardare utf8_encode e utf8_decode
  • La stringa di origine contiene caratteri non validi o qualcosa del genere. PHP dà: Attenzione: preg_replace (): Compilazione non riuscita: stringa UTF-8 non valida all'offset 0 in test.php sulla riga 7

Credo che ci sia anche un errore nell'espressione Regex: ~\x{2192}~u

Prova a sostituire quello che ho e vedi se funziona per te: /\x{2192}/u

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top