如何替换以@@开头的文本中的单词,并以@@结尾的其他单词结束?

时间:2014-05-12 04:13:08

标签: php arrays regex function

如何替换以@@开头并以@@结尾的单词中的单词? 提前致谢

$str = 'This is test @@test123@@';

如何获得test123的位置并替换为另一个

3 个答案:

答案 0 :(得分:3)

你最好使用正则表达式。

echo $str = preg_replace("~@@(.*?)@@~","This is the replaced text", $str);

Demonstration

编辑答案..由于OP在不清楚的上下文中提出问题

因为您希望获取内容。使用preg_match()和相同的正则表达式。

<?php
$str = 'This is test @@test123@@';
preg_match("~@@(.*?)@@~", $str, $match);
echo $match[1]; //"prints" test123

答案 1 :(得分:2)

并不是说你不一定在这里使用正则表达式,但这里有另一种选择:

鉴于:$str = 'This is test @@test123@@';

$new_str = substr($str, strpos($str, "@@")+2, (strpos($str, "@@", $start))-(strpos($str, "@@")+2));

或者,同样的事情分解了:

$start = strpos($str, "@@")+2;
$end = strpos($str, "@@", $start);
$new_str = substr($str, $start, $end-$start);

输出:

echo $new_str; // test123

答案 2 :(得分:1)

此类型的模板标记替换最好使用preg_replace_callback处理。

$str = 'This is test @@test123@@.  This test contains other tags like @@test321@@.';

$rendered = preg_replace_callback(
    '|@@(.+?)@@|',
    function ($m) {
        return tag_lookup($m[1]);
    },
    $str
);