2014-09-23 57 views
0

我試圖用regular expressions替換一個字符串,並且這個字符串不包含特定的單詞。正則表達式,如何替換不包含單詞的字符串?

這裏是字符串:

$string = 'mysql_fetch_array($stmt = mysql_query($query));' // Shouldn't match 
$string = 'mysql_fetch_array($stmt));' // Should match 

正則表達式:

preg_replace('/^(.*)mysql_fetch_(.*)\([ ]?.*(?!mysql_query).*[ ]?\)(.*)$/', $value, $string); 

但兩個串匹配上述表達式。

我該如何更換第二個字符串?

+0

所以含有'的mysql_query($查詢)'不應該匹配的字符串? – aelor 2014-09-23 10:52:30

回答

2

如何:

$arr = array('mysql_fetch_array($stmt = mysql_query($query));', 'mysql_fetch_array($stmt));'); 
$value = 'NEW($1)'; 
foreach($arr as $string) { 
    $string = preg_replace('/^.*?mysql_fetch_[^(]+\(*(\$\w+)(?!.* = mysql_query).*\);$/', $value, $string); 
    echo $string,"\n"; 
} 

輸出:

mysql_fetch_array($stmt = mysql_query($query)); 
NEW($stmt) 
+0

它正在工作,但我想用括號捕捉'$ stmt',我該怎麼做? – 2014-09-23 11:50:02

+0

@thomash:看到我的編輯,是你想要的嗎? – Toto 2014-09-23 11:58:49

0

爲什麼使用正則表達式。 PHP有一個字符串替換方法:正則表達式總是你應該做的最後一個選擇。

str_replace("[new sub]", "[old sub]", "[whole string]"); 

http://php.net/manual/en/function.str-replace.php

+1

「正則表達式總是你應該做的最後一個選擇。」 **爲什麼?**我的意思是,它非常強大。爲什麼讓它成爲最後的選擇? – 2014-09-23 12:05:00