Regex删除匹配前缀php


Regex remove match prefix php

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

这就是您想要的吗?

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