2015-09-03 11 views
7

Sto scrivendo del codice PHP. In questo codice, eseguo un ciclo for all'interno di un ciclo for per eseguire iterazioni su un array, quindi per eseguire un'iterazione sui caratteri nella stringa corrente nell'array.preg_match(): Compilazione fallita: il valore del carattere in x {} o o {} è troppo grande con offset 27 sulla riga numero 25

Quindi voglio fare preg_match() sulla stringa corrente per vedere se corrisponde ad una RegEx piuttosto ling.

preg_match('/[ \f\n\r\t\v\x{00a0}\x{1680}\x{180e}\x{2000-}\x{200a}\x{2028}\x{2029}\x{202f}\x{205f}\x{3000}\x{feff}]/', $input[$i][$j]) 

Ma io continuo a ricevere il seguente errore:

WARNING preg_match(): Compilation failed: character value in \x{} or \o{} is too large at offset 27 on line number 25

+1

Cosa avete intenzione di abbinare con '\ x {} 2000-'? Immagino sia un errore di battitura. Controlla ['[\ f \ n \ r \ t \ v \ x {00a0} \ x {1680} \ x {180e} \ x {2000} - \ x {200a} \ x {2028} \ x {2029} \ x {} 202F \ x {} 205F \ x {3000} \ x {} FEFF] '] (https://regex101.com/r/gV6vN2/2). Funziona? –

+1

Se si tratta di un errore di battitura, rimuovere la domanda. –

risposta

13

Aggiungi UTF-8 analisi, non si è in modalità UFT8. Aggiungi il parametro u.

preg_match('/[ \f\n\r\t\v\x{00a0}\x{1680}\x{180e}\x{2000-}\x{200a}\x{2028}\x{2029}\x{202f}\x{205f}\x{3000}\x{feff}]/u', $input[$i][$j]); 

Inoltre, vorrei sottolineare anche che hai un errore di battitura. \x{2000-} dovrebbe essere \x{2000} o \x{2000}-:

preg_match('/[ \f\n\r\t\v\x{00a0}\x{1680}\x{180e}\x{2000}\x{200a}\x{2028}\x{2029}\x{202f}\x{205f}\x{3000}\x{feff}]/u', $input[$i][$j]); 
+0

Se vedi qui: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions Ho copiato il RegEx da "\ s" mostra il carattere unicode (\ u200-) con un trattino alla fine di esso, che pensavo fosse strano, ma non riesco a capire se effettivamente dovrebbe essere così o no – Timothy

+0

@Timothy In realtà, questo è un * intervallo *. \ u2000 - significa, ogni personaggio nell'intervallo di \ u2000 fino a \ u200a. Quindi deve essere '\ x {2000} - \ x {200a}' – Roboroads

+0

In realtà ... non lo fa -_- Ho provato persino a rimuoverlo in '' \ x {2000} \ x {2001} \ x {2002} \ x {2003} \ x {2004} \ x {2005} \ x {2006} \ x {2007} \ x {2008} \ x {2009} \ x {200a} '' 'ed è mi dà lo stesso errore:/ – Timothy

Problemi correlati