鉴于以下内容:
$ foo =“哟[用户Cobb]我听说你喜欢梦想,所以我在你的梦中实现梦想,这样你就可以在梦想的同时做梦。”
我想这样做:
$ foo = bar($ foo);
echo $ foo;
得到这样的东西:
哟Cobb我听说你喜欢梦想,所以我在你的梦中实现梦想,这样你就可以在梦中做梦时做梦。
我不确定bar
函数应该如何工作。我认为这对于正则表达式是可行的,但我个人觉得这些很难理解。使用strpos函数是另一种方法,但我想知道是否有更好的解决方案。
伪代码很好,但实际代码将受到赞赏。
编辑:
这些标签不是占位符,因为第二部分是变量值。
编辑:
所有str_replace答案都不正确,因为标签包含可变内容。
答案 0 :(得分:4)
您可以使用preg_match_all在字符串中搜索标签。
function bar($foo)
{
$count = preg_match_all("/\[(\w+?)\s(\w+?)\]/", $foo, $matches);
if($count > 0)
{
for($i = 0; $i < $count; $i++)
{
// $matches[0][$i] contains the entire matched string
// $matches[1][$i] contains the first portion (ex: user)
// $matches[2][$i] contains the second portion (ex: Cobb)
switch($matches[1][$i])
{
case 'user':
$replacement = tag_user($matches[2][$i]);
str_replace($matches[0][$i], $replacement, $foo);
break;
}
}
}
}
现在,您可以通过向交换机添加更多案例来添加更多功能。
答案 1 :(得分:3)
由于标签包含您要解析的内容而不是静态的替换标签,因此您必须使用正则表达式。 (这是最简单的方法。)
preg_replace()是替换文本的正则表达式函数。
$pattern = '/\[user (\w+)\]/i';
$rpl = '<a href="http://example.com/user/${1}">${1}</a>';
return preg_replace($pattern, $rpl, $foo);
这将匹配[user xy]标签,其中xy是至少一个字符的单词(单词字符序列)。由于它在括号中,因此可以在替换字符串中使用{1}访问它。 $ foo是您要解析的字符串。返回的是带有替换标记的已解析字符串。模式上的i
修饰符将使匹配不区分大小写。如果您希望它区分大小写,请将其删除。
(你从[用户Cobb]解析到wikipedia url leonardo dicabrio的例子,它与user
和Cobb
都没有对应。所以无论你到那里,你都必须这样做(查询数据库?无论如何)。如果它只是不够小心提供示例代码;您可能想指向一个静态URL并将标记内容的一部分添加到其中,这就是我在这里所做的。)
答案 2 :(得分:1)
str_replace()将是您的最佳选择:
function bar($foo) {
$user = 'Cobb';
return str_replace('[user]', $user, $foo);
}
$foo = 'Yo [user] I heard you like dreams so I put a dream in yo dream in yo dream so you can dream while you dream while you dream.'
$foo = bar($foo);
print $foo; // Will print "Yo Cobb I heard you like dreams so I put a dream in yo dream in yo dream so you can dream while you dream while you dream."
答案 3 :(得分:0)
str_replace怎么办?
function bar(foo) return str_replace($arrayWithStringsToGetReplaced, $arrayWithStringsToReplaceWith, $foo)
如果我理解以下评论 正确。
这显然超出了我的范围。继续......:)
答案 4 :(得分:-1)
Regular Expressions
是要走的路。很难,但学习它们所获得的好处远远超过了学习所需的努力。
来自php.net
<?php
$text = 'The price is PRICE ';
$lookFor = 'PRICE';
$replacement = '$100';
echo $replacement.'<br />';
//will display
//$100
echo str_replace($lookFor, $replacement, $text).'<br />';
//Will display
//The price is $100
?>