突出显示可包含自己的提取字符的子字符串

时间:2014-05-17 14:32:53

标签: php regex string

我需要创建功能,突出显示我搜索到的子字符串。例如,我有字符串“123456789”,我搜索子字符串“234”。这很简单,只需要创建函数:

str_replace('234', '123456789', '<b>234</b>');

但是字符串可以包含四个(只有这四个)特殊字符(“”,“(”,“)”,“ - ”),我需要跳过它。

所以我可以使用字符串“12 3(456)78-9)”并且我仍然需要突出搜索“234”,所以最终的字符串需要看起来像

"1<b>2 3(4</b>56)78-9)"

您对此有何建议?

编辑:字符串和子字符串可以包含任何字符,不仅包括例如字符串的数字:“Poly(amide 610)”和搜索的单词可以是“polyamide6” - 突出显示的是“Poly(amide 6”

1 个答案:

答案 0 :(得分:0)

您需要在目标字符串的每个字符之间放置一个描述要跳过的字符的子模式:

$str = '12 3(456)78-9)';
$needle = '234';
$neutral = '[ ()-]*';

$pattern = '/' . implode($neutral, array_map(preg_quote, str_split($needle))) . '/iu';

$result = preg_replace($pattern, '<b>$0</b>', $str);