我们说我收到了这个字符串:
$str = "alemylaife";
(我知道它的拼写错误,我的生命)
现在我该如何替换
" ALE"没有替换" ale"那也包含相同的字母?
我们说我有这个阵列:
$replace = Array("a","l","e");
$with = Array("wh","at","ever");
$str = str_replace($replace,$with,$str);
echo $str;
这将打印:
whatevermyatwhifever
如何在" ale"之后停止str_replace替换字母? 也许我必须修剪3个首字母然后替换它们然后加入修剪过的字符串?
编辑:我将尝试表达自己的清晰度。 我希望只有三(3)个首字母被替换,如果它们包含A THEN L THEN,那么,ala ale ald ally ally。那些是我想要被替换的字母。我不希望他们之后的信件受到影响。答案 0 :(得分:2)
问题不是很清楚。假设你想用“什么”替换“ale”(如果我错了,请纠正我),那么你可以使用preg_replace来限制替换次数。
示例1:(替换第一次出现的“ale”)
preg_replace("/ale/", "whatever", "alemylaife", 1)
> whatevermylaife
示例2:(仅当字符串以“ale”开始时替换
)preg_replace("/^ale/", "whatever", "alemylaife", 1)
> whatevermylaife
preg_replace("/^ale/", "whatever", "lolalemylaife", 1)
> lolalemylaife
编辑:您编辑了问题以提供更详细的信息,我会使用:
// match a string that begins with "al" and then a character (case in-sensitive)
preg_replace("/^al[a-z]/i", "whatever", "alemylaife");
答案 1 :(得分:1)
输出F因为A替换为B,然后B替换为C,依此类推...... 最后E由F替换,因为从左到右替换。
$search = array('A', 'B', 'C', 'D', 'E');
$replace = array('B', 'C', 'D', 'E', 'F');
$subject = 'A';
echo str_replace($search, $replace, $subject);
产量:apearpearle梨 出于同样的原因
$letters = array('a', 'p');
$fruit = array('apple', 'pear');
$text = 'a p';
$output = str_replace($letters, $fruit, $text);
echo $output;
答案 2 :(得分:0)
您是否有固定的搜索和替换?机器无法知道您的ale
字符串。
你可以扩大你的搜索范围,直到你有一个独特的匹配,例如使用限制参数设置为1,将alem
替换为all m
或preg_replace。当然,这将始终替换第一次出现。
答案 3 :(得分:0)
答案 4 :(得分:0)
我不太清楚你在这里看到哪种字符串函数。
$string = "alemylaife";
然后你写下字母"ale"
。目前尚不清楚您是指序列"ale"
还是仅表示字母,任何顺序,任何计数,直到每个("a"
,"e"
,"l"
)至少匹配一次。
这将是两件非常不同的事情。让我们拿第一个,这更容易:
// search for needle
$needle = 'ale';
$pos = strpos($string, $needle);
if (false === $pos) {
$before = '';
$after = $string;
} else {
$before = substr($string, 0, $pos);
$after = substr($string, $pos + strlen($needle));
}
然后,您可以在您想要的部分上运行替换,然后再连接。
第二种变体需要更多的处理逻辑。可以通过找到每个字符的第一个位置来完成,然后最大匹配就是位置。如果任何搜索失败,则失败。这将替换第一个示例中的str_pos
调用,实际上它会多次运行它:
// search for character group
$group = str_split($needle);
$pos = false;
foreach (str_split($needle) as $character) {
$test = strpos($string, $character);
if (false === $test) {
$pos = false;
break;
}
$test += strlen($character);
if ($test >= $pos) {
$pos = $test;
}
}
最后,$pos
包含第一个字母的位置,这是整个组的最后一个匹配字母。