懒惰和贪婪的正则表达式

时间:2014-10-07 15:30:37

标签: regex

我正在尝试编写正则表达式只是为了删除 HTML标记但不幸的是我删除了标记以及此标记的内容,这称为贪婪正则表达

例如

如果我有这个标签

 <div> HELLO </div>

使用我的正则表达式我删除了div标签(div),我删除了这个标签的内容,例如(HELLO)字。

所以请如何编写懒惰的正则表达式,只是为了删除标记而不删除此标记的内容。

3 个答案:

答案 0 :(得分:0)

您需要使用ungreedy正则表达式,例如:

< [^>]+>

.+将采用它可以包含的所有字符,这意味着所有字符。

答案 1 :(得分:0)

<[^>]*>

这应该删除所有标签,包括结束标签。

答案 2 :(得分:0)

在此之前,您应该知道几乎每种脚本语言都有一个stip_tags,它可以完全满足您的需求。但是如果你想要一个自定义解决方案,可能就是这个:

<.*?>

匹配单个标签。以下,表示正则表达式:

  • &LT;匹配字符&lt;字面上。
  • 。匹配除换行符之外的任何字符。
  • *?在零和无限时间之间量化,尽可能少,根据需要扩展。懒惰而不贪心。这意味着匹配尽可能少的字符。
  • &GT;匹配字符&gt;字面上。

现在执行取决于你正在使用的语言脚本。


例如,在php中你会做类似的事情:

$re = "/(<.*?>)/"; 
$str = "<p id=\"test\">This is a simple test</p>"; 

echo preg_replace($re, "", $str);

点击此链接demo查看一个有效的示例。


在javascript中,您可以执行以下操作:

var re = "<.*?>";
var str = '<p id="test">This is a simple test</p>';

alert(str.replace(new RegExp(re,"gm"), ""));

点击此链接demo查看一个有效的示例。

希望它有用!