RegExp, как заменить строку, не содержащую слова?

Я пытаюсь заменить строку, используя 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

Решение

Как насчет:

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

Другие решения

Зачем использовать регулярные выражения В PHP есть метод замены строк: Regex — всегда последний выбор, который вы должны сделать.

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

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

0

По вопросам рекламы [email protected]