PHP: Fuggire personaggi riservati al regex: qualcuno sa cosa c'è che non va in questo?

StackOverflow https://stackoverflow.com/questions/1789382

  •  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('&nbsp;',$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 è " ["?

È stato utile?

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
scroll top