PHP: Kaçış RegEx-ayrılmış karakterler - Herkes bu sorunun ne biliyor musun?

2 Cevap php

Ben (sormayın - Ben HTML ayrıştırmak çalışıyorum değilim söylemek yeterli :)) bir ters eğik çizgi ile regex-ayrılmış karakterler kaçmaya çalışıyorum Ve ben garip bir şey alıyorum.

$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;

Açıklık alanı içindir. Bu çıkış

[ \ ^ $ . | ? * + ( )
\\ [ \\ \^ \& \. \| \? \* \+ \( \)

Böylece tüm ilk bölümü hariç, iyidir. Nerede "\ \" nereden geliyor ve neden "\ [" değil mi?

2 Cevap

Neden sadece kullanmak değil preg_quote?

Ben sırf dizideki karakter koyarak konum düzenin olduğuna inanıyorum. Bu deneyin:

$regex_chars = array('\\' , '[' , '^', '$' , '.' , '|' , 
        '?' , '*' , '+' , '(' , ')');  
$regex_chars_escaped = array( '\\\\ ' ,'\[ ', '\^ ', '\& ' , 
        '\. ' , '\| ' , '\? ' , '\* ' , '\+ ' , '\( ' , '\)');

Ve beklenen çıktıyı almalısınız. str_replace function spec in 'potential gotchas' bölümünü kontrol