我需要一个系统来搜索特定模式的字符串,然后为其添加特定的HTML标记但删除搜索字符串。
例如,如果匹配字符串为%%
且有人输入此%%MyString
,则应将其转换为此<p class="myClass">MyString </p>
,而不在其前面加%%
。
这是我试过的代码。我认为必须对${99}
做些什么。我试过了$0
,但仍然给了我匹配字符串。
function convertLabels($str){
$regex = "/<(.*?)>[%]+([a-zA-Z0-9_]+)<(.*?)>/";
$str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-default">${99}</a>', $str);
$regex = "/<(.*?)>[%%]+([a-zA-Z0-9_]+)<(.*?)>/";
$str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-primary">${99}</a>', $str);
$regex = "/<(.*?)>[%!]+([a-zA-Z0-9_]+)<(.*?)>/";
$str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-info">${99}</a>', $str);
$regex = "/<(.*?)>[%%!]+([a-zA-Z0-9_]+)<(.*?)>/";
$str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-warning">${99}</a>', $str);
$regex = "/<(.*?)>[%!!]+([a-zA-Z0-9_]+)<(.*?)>/";
$str = preg_replace($regex, '<a href="listhash.php?tag=$1" class="label label-danger">${99}</a>', $str);
return($str);
}
答案 0 :(得分:1)
这是你想要的吗?
function convertLabels($str){
$regex = "/%%([^\s]+)/";
$str = preg_replace($regex, '<p class="myClass">${1}</p>', $str);
return $str;
}
echo convertLabels("wrap the %%text with a p tag");
输出:
wrap the <p class="myClass">text</p> with a p tag
说明:
[^\s]+
...一个或多个任意字符(不包括空格字符)
${1}
是对模式中第一个带括号的表达式的反向引用,即([^\s]+)
,这意味着%%
与下一个出现空格字符之间的所有文本。