使用preg_replace </b>将<b> -tag包围在字符串的第一个单词周围

时间:2012-05-31 12:16:55

标签: php regex preg-replace

我的问题是,这个:

preg_replace('/(?<=\>)\b\w*\b|^\w*\b/', '<b>$&</b>', $string);

不起作用,我不知道为什么!

如果字符串为<b>$&</b> example,则输出:an example。这是错的。 它应该是:<b>an</b> example

我使用http://gskinner.com/RegExr/生成了这个正则表达式代码。

我知道显然$&没有做正确的事情。但是我怎么能让它发挥作用呢?

你能给我一个提示吗?

3 个答案:

答案 0 :(得分:10)

尝试使用此

preg_replace('/(?<=\>)\b\w*\b|^\w*\b/', '<b>$0</b>', $string);

$ 0意味着它将成为你的正则表达式中匹配的第一个东西,$ 1将成为第二个等等。

你也可以使用反向引用; \ 0得到第一个匹配你的位置,\ 1得到第二个匹配的东西等。More Info

答案 1 :(得分:2)

你需要在$之后加上一个数字来引用正则表达式的分组部分。这将是第一组,因此为0.这里的工作示例:http://codepad.org/4V7GWdja

<?php

$string = "an example";
$string = preg_replace('/(?<=\>)\b(\w*)\b|^\w*\b/', '<b>$0</b>', $string);
var_dump($string);

?>

答案 2 :(得分:1)

$string = 'an example';
echo preg_replace('/^\b(.+?)\b/i', '<b>$1</b>', $string);

// <b>an</b> example