RegEx,如何替换不包含单词的字符串?

时间:2014-09-23 10:47:58

标签: php regex preg-replace

我正在尝试使用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);

但两个字符串都匹配上面的表达式。

如何只替换第二个字符串?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

为什么要使用正则表达式。 PHP有一个字符串替换方法:Regex始终是你应该做的最后选择。

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

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