PHP: Fuggire personaggi riservati al regex: qualcuno sa cosa c'è che non va in questo?
-
22-09-2019 - |
Domanda
Sto cercando di sfuggire ai personaggi riservati a Regex con una retroscena (non chiedere-basti dire che non sto cercando di analizzare HTML :)) e sto diventando qualcosa di strano.
$regex_chars = array('[' , '\\' , '^', '$' , '.' , '|' ,
'?' , '*' , '+' , '(' , ')');
$regex_chars_escaped = array('\[ ' , '\\\\ ' , '\^ ', '\& ' ,
'\. ' , '\| ' , '\? ' , '\* ' , '\+ ' , '\( ' , '\)');
$escaped_string = str_replace($regex_chars,$regex_chars_escaped,
implode("",$regex_chars));
echo implode(' ',$regex_chars) . "<br />";
echo $escaped_string;
Gli spazi sono per chiarezza. Questo è l'output
[ \ ^ $ . | ? * + ( )
\\ [ \\ \^ \& \. \| \? \* \+ \( \)
Quindi va tutto bene, tranne la prima parte. Da dove viene "" e perché non è " ["?
Soluzione
Perché non semplicemente usare preg_quote?
Altri suggerimenti
Credo che sia solo per l'ordine che stai mettendo i caratteri nell'array. Prova questo:
$regex_chars = array('\\' , '[' , '^', '$' , '.' , '|' ,
'?' , '*' , '+' , '(' , ')');
$regex_chars_escaped = array( '\\\\ ' ,'\[ ', '\^ ', '\& ' ,
'\. ' , '\| ' , '\? ' , '\* ' , '\+ ' , '\( ' , '\)');
E dovresti ottenere l'output previsto. Controlla il 'potenziale gotchas' sezione nella Str_rePlace Function Spec
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow