繁体   English   中英

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

[英]Regex to replace html tags between parenthesis

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

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

所需的输出是

<table><tr>Hello name</tr></table>

@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);

您不能仅使用一个简单的正则表达式来完成此操作,但是可以使用正则表达式来找到下面的括号

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]包含比赛中第一个括号内的文本。 然后,在回调函数中使用函数strip_tags()删除所有HTML标签。 这是预定义的功能,应该代替重新发明轮子。

RegEx的构造如下:

  1. 的匹配具有开始{并结束与} ; 我们需要对其进行转义,因此我们使用\\{ ... \\}
  2. 我们希望处理所有内容,但周围的{} )\\} ,因此我们将圆括号放在\\{( ... )\\} ,然后将花括号中的全部内容作为$ match [1]来获取,而无需进一步通过使用其他字符串函数删除那些花括号。
  3. 我们希望允许{}之间的所有字符,除了}本身; 我们使用[^\\}] ,它匹配除}所有字符; 并且我们想允许它们多个,结果是: [^\\}]*

注意: .*是贪婪的。 因此,如果仅使用.*而不是[^\\}]*则在有多个花括号块的情况下,我们会得到怪异的结果。 匹配将从字符串中的第一个开头{开始,最后一个}结束,并将包含所有块及其之间的所有内容。 这将匹配如下:“ {in first} something between {and second one}短信。还有更多。” -但我们希望它像这样匹配:“在{and second one}之间的{in first}文本中输入文本。还有更多。”对吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM