正则表达式删除文本中的所有标记(如果它被$$包围)

时间:2015-12-06 22:29:12

标签: php regex

如果它位于两个连续的$$之间,我需要正则表达式去除文本中的所有标记。两个连续的$$形成一个区块。

例如: - 以下文字

This is <outtag>just</outtag> a test from $$outside and
<intag>from</intag> $$ inside and again <outtag>I am </outtag>inside out $$so I have
<intag>to go <\intag>in$$ go outside.

必须删除intag,因为它位于由两个连续$$形成的块内。我试图将它与正则表达式匹配

(\$\$.*?)<(.+?)>(.*?)<\/\2>.*?\$\$

但我不知道如何重复在$$内发生的标记,而且我也不知道如何制作连续两个$的块。

@nauriel我有一个mathjax代码,如果有两个下划线或其他一些降价字符,则由markdown处理标记。

是的,我总是有一个偶数的$$。

@sln只是标记<intag></intag>,而不是标记的全部内容。

1 个答案:

答案 0 :(得分:1)

非常简单直接:

$input = 'This is <outtag>just</outtag> a test from $$outside and
<intag>from</intag> $$ inside and again <outtag>I am </outtag>inside out $$so I have
<intag>to go </intag>in$$ go outside.';

$output = preg_replace_callback('/\$\$.*?\$\$/s', function($m) {
    return preg_replace('/<(.+?)>(.*?)<\/\1>/s', '$2', $m[0]);
}, $input);

echo $output;