preg_replace使用匹配的模式替换

时间:2014-01-24 06:56:46

标签: php regex

我想询问是否可以使用匹配的正则表达式来确定数组的替换。例如

$rpl['brat'] = 'qwerty';
$rpl['omri'] = 'asdfgh';

$str1 = 'abc brat bca';
$str2 = 'abc omri bca';

print_r(preg_replace('#bc (.+?) bc#'), $rpl[$1], $str1)); // aqwertya
print_r(preg_replace('#bc (.+?) bc#'), $rpl[$1], $str2)); // aasdfgha

现在很明显$1语法不正确,但这只是为了表明我正在做的事情。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

preg_replace_callback与修改后的正则表达式一起使用:

$rpl['brat'] = 'qwerty';
$rpl['omri'] = 'asdfgh';

$str1 = 'abc brat bca';
$str2 = 'abc omri bca';

print_r(preg_replace_callback('/bc (\w+) bc/', function($match) use($rpl) {
    return $rpl[$match[1]];
}, $str1)); // => abc qwerty bca

print_r("\n");

print_r(preg_replace_callback('/bc (\w+) bc/', function($match) use($rpl) {
    return $rpl[$match[1]];
}, $str1)); // => aqwertya

输出:

abc qwerty bca
aqwertya

答案 1 :(得分:0)

你也可以使用标志'e',但不建议这样做,因为它可能导致安全问题

print_r(preg_replace('/bc (.+?) bc/e', '$rpl[$1]', $str1));
print_r(preg_replace('/bc (.+?) bc/e', '$rpl[$1]', $str2));