我正在尝试编写一个正在删除占位符文本周围的HTML标记的正则表达式,以便:
<p>
Blah</p>
<p>
{{{body}}}</p>
<p>
Blah</p>
成为这个:
<p>
Blah</p>
{{{body}}}
<p>
Blah</p>
我目前的正则表达式为/<.+>.*\{\{\{body\}\}\}<\/.+>/msU
。但是,它还会删除占位符前面的标记内容,从而产生:
{{{body}}}
<p>
Blah</p>
我不能假设用户总是将占位符放在<p>
内,所以我希望它能够在占位符周围删除任何一对标记。我很感激帮助纠正我的正则表达式。
[编辑]
我认为重要的是要注意CKEditor可能会也可能不会处理输入。它为开始标记添加了换行符和制表符,因此正则表达式需要使用/sm
(dotall + multiline)修饰符。
答案 0 :(得分:5)
试试这个:
<[^>]+>\s*\{{3}body\}{3}\s*<\/[^>]+>
在此处查看:[{3}}
以下是细分:
<[^>]+>
匹配一个开头的HTML代码,只有那个。\s*
捕获任何空格(相当于[ \t\r\n]*
)\{{3}
恰好与{
匹配3次body
字面上匹配字符串\}{3}
恰好与}
匹配3次\s*
,捕获任何空白<\/[^>]+>
匹配结束HTML标记答案 1 :(得分:1)
php strip_tags不能用于你的情况吗?
http://php.net/manual/en/function.strip-tags.php
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";
// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>