preg_replace或str_replace Php按位置替换

时间:2012-12-27 10:34:04

标签: php regex string replace preg-replace

我们说我收到了这个字符串:

$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。那些是我想要被替换的字母。我不希望他们之后的信件受到影响。

5 个答案:

答案 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;

进一步参考检查http://php.net/manual/en/function.str-replace.php

答案 2 :(得分:0)

您是否有固定的搜索和替换?机器无法知道您的ale字符串。

你可以扩大你的搜索范围,直到你有一个独特的匹配,例如使用限制参数设置为1,将alem替换为all mpreg_replace。当然,这将始终替换第一次出现。

答案 3 :(得分:0)

您是否考虑过使用strposstrripos

答案 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包含第一个字母的位置,这是整个组的最后一个匹配字母。

相关问题