Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php RegExp,如何替换不包含单词的字符串?_Php_Regex_Preg Replace - Fatal编程技术网

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

Php RegExp,如何替换不包含单词的字符串?,php,regex,preg-replace,Php,Regex,Preg Replace,我正在尝试使用正则表达式替换字符串,但该字符串不包含特定的单词 以下是字符串: $string = 'mysql_fetch_array( $stmt = mysql_query( $query ) );' // Shouldn't match $string = 'mysql_fetch_array( $stmt ) );' // Should match 正则表达式: preg_replace('/^(.*)mysql_fetch_(.*)\([ ]?.*(?!mysql_query).*

我正在尝试使用
正则表达式替换字符串,但该字符串不包含特定的单词

以下是字符串:

$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);
但是这两个字符串都匹配上面的表达式


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

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

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

那么:

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

因此,包含
mysql\u query($query)
的字符串不应该匹配?它可以工作,但我想用括号捕捉
$stmt
,我该怎么做?“Regex始终是您应该做的最后一个选择。”为什么?我是说,它相当强大。为什么要把它作为最后的选择?