OK
, поэтому вы хотите захватить совпадения и заменить их одним вызовом функции. Я предполагаю, что вы не хотите обрабатывать дорогостоящее регулярное выражение дважды, иначе я не вижу веской причины хотеть сделать ваш код менее читабельным.
Во всяком случае,
Вы можете попробовать использовать preg_replace_callback()
. Что-то вроде:
class MatchReplace {
var $matches;
var $pattern;
var $replacement;
var $string;
var $matchCount;
function __construct($pattern, $replacement) {
$this->replacement = $replacement;
$this->pattern = $pattern;
}
function matchAndReplace($string) {
$this->string = $string;
var_dump($string);
var_dump($this->pattern);
return preg_replace_callback($this->pattern,
array($this, '_worker'), $string, -1, $this->matchCount);
}
function _worker($matches) {
echo "Matches:\n";
var_dump($matches);
}
}
Пример выполнения:
<code>echo "<pre>\n";
$m = new MatchReplace('|(abc)|', '');
echo "\nResult: \n".$m->matchAndReplace('XXXabcYYY');
echo "\n
";
Выход:
string(9) "XXXabcYYY"
string(7) "|(abc)|"
Matches:
array(2) {
[0]=>
string(3) "abc"
[1]=>
string(3) "abc"
}
Result:
XXXYYY