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始终是您应该做的最后一个选择。”为什么?我是说,它相当强大。为什么要把它作为最后的选择?