正则表达式解析<>中的字符

时间:2014-09-19 09:06:21

标签: regex

我想删除<>之间出现的所有字符,除非它以<&开头。

这是因为内部系统需要一些宏标记,但需要从字符串中删除所有HTML。

我有部分工作,但它也删除了标签之间的细节,例如它也会从内部删除'word':

<span>word</span>

我的正则表达式是:

(<[^&]*>)|(&nbsp;)

可以通过示例文本找到:

http://regexr.com/39hfj

2 个答案:

答案 0 :(得分:3)

<[^&]*>匹配<>之间的任何字符串,只要它没有&即可。您希望匹配其中没有&>的任何字符串。请使用<[^&>]*>。 (另一种方法是使用其他答案中提到的惰性标志)。

顺便说一下,这个输入字符串的预期行为是什么?

some text <a title="a & b">hello</a>

您当前的正则表达式与此字符串中的开始锚标记不匹配,因为它包含&。但是我相信只有当&紧跟<后才关注&,对吗?

在这种情况下,您只需要确保第一个字符不是(<[^&].*?>)

|

但这不符合空标签;如果您关心空标签,请使用(<[^&].*?>|<>)

添加标签
{{1}}

答案 1 :(得分:1)

您应该在星号后添加?非贪婪,并在第一次出现>时停止:(<[^&]*?>)|(&nbsp;)