正则表达式替换括号之间的html标签

时间:2016-08-30 14:12:13

标签: php regex

我需要替换括号之间放置的html标签。以下是我的代码。任何帮助将不胜感激。

c:\hugo\bin\hugo.exe

必需的输出是

$string  = '<table><tr>Hello{<strong><br/>name<br/></strong>}</tr></table>';
echo preg_replace("/\{<.*?>\}/","",$string);

2 个答案:

答案 0 :(得分:2)

@Diksha试试这个:

$string  = '<table><tr><td>Hello {<strong><br/>name<br/></strong>}</td></tr></table>';


echo $str = preg_replace_callback("/\{<.*?>\}/", function($m){
    return preg_replace('/\{|\}/',"",strip_tags($m[0]));
}, $string);

答案 1 :(得分:2)

单独使用一个简单的正则表达式无法做到这一点,但您可以使用正则表达式来查找paranthesis块,如下所示

function process_paranthesis($match) {
  return strip_tags($match[1]);
}

$string  = '<table><tr>Hello { <strong>name</strong>}</tr></table>';
echo preg_replace_callback("/\{([^\}]*)\}/", "process_paranthesis",$string);

RegEx被修改为只找到所有{...} - 块,我们使用preg_replace_callback(),它调用一个函数来计算要替换匹配的字符串。回调函数的参数$ match以各种方式包含有关匹配的信息。 $ match [0]包含匹配的全文,$ match [1]包含匹配中第一个paranthesis内的文本。 然后在回调函数中使用函数strip_tags()来删除所有HTML标签。这是一个预定义的功能,应该使用它而不是重新发明轮子。

RegEx的构建如下:

  1. 匹配以{开头,以}结尾;我们需要转义它,因此我们使用\{ ... \}
  2. 我们希望处理所有内容,但是要处理周围的{},因此我们将问题放在内部:\{( ... )\}然后将获得整体花括号内的内容为$ match [1],无需进一步使用其他字符串函数删除那些花括号。
  3. 除了{本身之外,我们希望允许}}之间的所有字符;我们使用[^\}],它匹配各种字符但};我们希望允许其中的多个,从而产生:[^\}]*
  4. 注意:.*贪婪。因此,如果我们只使用.*而不是[^\}]*,我们会得到奇怪的结果,以防有多个花括号块。匹配将从第一个开头{开始,到字符串中的最后一个}结束,并包含所有块以及它之间的所有内容。这将匹配如下:&#34;文本{in first} something between {and second one}。还有一些。&#34; - 但我们希望它匹配如下:&#34;文字{in first} {and second one}之间的内容。还有一些。&#34;,对吧?