我需要替换括号之间放置的html标签。以下是我的代码。任何帮助将不胜感激。
c:\hugo\bin\hugo.exe
必需的输出是
$string = '<table><tr>Hello{<strong><br/>name<br/></strong>}</tr></table>';
echo preg_replace("/\{<.*?>\}/","",$string);
答案 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的构建如下:
{
开头,以}
结尾;我们需要转义它,因此我们使用\{
... \}
。{
和}
,因此我们将问题放在内部:\{(
... )\}
然后将获得整体花括号内的内容为$ match [1],无需进一步使用其他字符串函数删除那些花括号。{
本身之外,我们希望允许}
和}
之间的所有字符;我们使用[^\}]
,它匹配各种字符但}
;我们希望允许其中的多个,从而产生:[^\}]*
注意:.*
贪婪。因此,如果我们只使用.*
而不是[^\}]*
,我们会得到奇怪的结果,以防有多个花括号块。匹配将从第一个开头{
开始,到字符串中的最后一个}
结束,并包含所有块以及它之间的所有内容。这将匹配如下:&#34;文本{in first} something between {and second one}
。还有一些。&#34; - 但我们希望它匹配如下:&#34;文字{in first}
{and second one}
之间的内容。还有一些。&#34;,对吧?