PHP preg_replace 数组,但仅在初始字符串中。

3
这个脚本
<?php
$pat = array ( '/A/', '/B/');
$rep = array ( 'B', 'C');
print preg_replace($pat, $rep, 'AAB');
?>

我想要打印出'BBC'('B'替代'A','C'仅替代'B'的首字母)

但是却打印出了'CCC'('B'替代了'A','C'替代了'B'以及之前被'B'替代的'A')

如果我尝试使用以下脚本:

<?php
$pat = array ( '/A/', '/B/');
$rep = array ( 'B', 'C');
print preg_replace($pat, $rep, 'AAB', 1);
?>

但是它打印出来的是'CAB'...谢谢。
2个回答

1

如果你只想替换单个字符,那么可以使用 strtr

$str = strtr($str, 'AB', 'BC'); // means: replace A with B and replace B with C

如果你不仅仅是在谈论单个字符,而是关于字符串(但仍然没有正则表达式),strtr 仍然可以使用:

$str = strtr($str, array('Hallo' => 'World', 'World' => 'Hallo'));

我读的是strstr,但它应该是strtr。那就是正确答案!谢谢! - user721730
@nikic:如果需要正则表达式,答案应该是什么? - mmonem

1

这应该可以工作 :) 你只需更改它的顺序,使其在 A 之前替换 B,就可以了

<?php
$pat = array ( '/B/', '/A/');
$rep = array ( 'C', 'B');
print preg_replace($pat, $rep, 'AAB');
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接