[英]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的构造如下:
{
并结束与}
; 我们需要对其进行转义,因此我们使用\\{
... \\}
。 {
和}
)\\}
,因此我们将圆括号放在\\{(
... )\\}
,然后将花括号中的全部内容作为$ match [1]来获取,而无需进一步通过使用其他字符串函数删除那些花括号。 {
和}
之间的所有字符,除了}
本身; 我们使用[^\\}]
,它匹配除}
所有字符; 并且我们想允许它们多个,结果是: [^\\}]*
注意: .*
是贪婪的。 因此,如果仅使用.*
而不是[^\\}]*
则在有多个花括号块的情况下,我们会得到怪异的结果。 匹配将从字符串中的第一个开头{
开始,最后一个}
结束,并将包含所有块及其之间的所有内容。 这将匹配如下:“ {in first} something between {and second one}
短信。还有更多。” -但我们希望它像这样匹配:“在{and second one}
之间的{in first}
文本中输入文本。还有更多。”对吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.