PHP用另一个字符串中的单词替换字符串

时间:2018-05-30 15:57:11

标签: php regex

有两个变量:

$string1 = "Source for replace";
$string2 = "String {Word2} replace";

我需要将第二个变量中的 {Word 2} 替换为第一个常量中的相应单词(第二个单词为 - for )。如果 {Word 2} ,被替换的单词应使用大写字母,如果 {word} - 则应使用小写字母。

3 个答案:

答案 0 :(得分:0)

此解决方案似乎按照您的描述进行。

$string1 = "Source for replace";
$string2 = "String {Word2} replace";

//This will separate the string based on spaces
$arr1 = explode(' ', $string1);
$arr2 = explode(' ', $string2);

//Check the arrays are the same size
if( sizeof( $arr1 ) != sizeof( $arr2 ) ){
    echo "Your arrays are not the same size. This will cause error. Stop.";
    die();
}

//Find the occurence of {word2} in array 2
if( in_array('{word2}', $arr2) !== false ){
    $arr2key = array_search('{word2}', $arr2);
} else {
    $arr2key = array_search('{Word2}', $arr2);
}

//Replace the key in array 2 with the corresponding key from array 1
$arr2[$arr2key] = $arr1[$arr2key];

//Join array 2 back together again with spaces.
$string2 = implode(' ', $arr2);

echo $string2;

此代码将使用第一个句子中的相应单词替换第二个字符串中的{word2}或{Word2},无论位于何处。如果两个句子的长度不同,则会出现错误,程序将停止。

将来,当您提出问题时请更具体,并确保包含您已编写的任何代码。

答案 1 :(得分:0)

我使用preg_match来查找" {word}"它有多少数字。
然后我爆炸第一个字符串并使用str_replace并替换" {word}"分解字符串的索引减去1 我假设你想计算人类而不是数组,如果我错了就删除-1。

$string1 = "Source for replace";
$string2 = "String {Word2} replace";

Preg_match("/(\{word(\d+)\})/i", $string2, $matches);

$arr =explode(" ", $string1);

$str = str_replace($matches[1], $arr[$matches[2]-1], $string2);
Echo $str; // String for replace

https://3v4l.org/Hfotp

如果字数高于$ string1中的字数,则可能会发出通知,但您可以通过以下方式解决:

$arr =explode(" ", $string1);
If($matches[2] <= count($arr)){
    $str = str_replace($matches[1], $arr[$matches[2]-1], $string2);
    Echo $str;
}Else{
    Echo "there is no index " . $matches[2] . " in $string1";
}

如果需要

答案 2 :(得分:0)

我很无聊:

$words = explode(' ', $string1);

$result = preg_replace_callback('/\{(word(\d+))\}/i',
    function($m) use($words) {
        if($m[2] > count($words)) { return $m[0]; }     
        if($m[1][0] == strtoupper($m[1][0])) { return ucfirst($words[$m[2]-1]); }
        return lcfirst($words[$m[2]-1]);
    }, $string2);
  • 检查数字是否大于单词数
  • 检查大写字母Word / word
  • 从单词array
  • 的正确索引中返回单词