$string = "Lorem Ipsum is #simply# dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard #dummy# text ever since the 1500s, when an unknown printer took a galley of #type1# and scrambled it to #make# a #type2# specimen book. It has survived not only #five# centuries, but also the #leap# into electronic typesetting, remaining essentially unchanged";
我有一组硬代码字,例如"#simply# | #dummy# | #five# | #type1#"
我期望的输出是:
如果在$string
中找到硬代码字,则应以黑色突出显示。比如"<strong>...</strong>"
。
如果$string
中的单词在#...#
范围内但在硬代码字列表中不可用,则字符串中的这些单词应以红色突出显示。
请注意,即使我们在硬编码字中有#type1#,如果$ string包含#type2#
或#type3#
,它也应该突出显示。
这样做我尝试了如下
$pattern = "/#(\w+)#/";
$replacement = '<strong>$1</strong>';
$new_string = preg_replace($pattern, $replacement, $string);
这让我得到#..#标签突出显示的所有单词。
我在preg_不好有人可以提供帮助。提前谢谢。
答案 0 :(得分:1)
您必须使用带有回调函数的preg_replace_callback
作为替换参数。在该函数中,您可以测试哪个捕获组已成功并根据。
$pattern = '~#(?:(simply|dummy|five|type[123])|(\w+))#~';
$replacement = function ($match) {
if ( empty($match[2]) )
return '<strong>' . $match[1] . '</strong>';
else
return '<strong style="color:red">' . $match[2] . '</strong>';
};
$result = preg_replace_callback($pattern, $replacement, $text);
答案 1 :(得分:0)
不确定我是否真的了解您的需求,但是:
$pat = '#(simply|dummy|five|type\d)#';
$repl = '<strong>$1</strong>';
$new_str = preg_replace("/$pat/", $repl, $string);