正则表达式删除匹配前缀php

时间:2015-03-24 06:55:09

标签: php regex

我需要一个系统来搜索特定模式的字符串,然后为其添加特定的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);
}

1 个答案:

答案 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]+),这意味着%%与下一个出现空格字符之间的所有文本。