我想删除<>
之间出现的所有字符,除非它以<&
开头。
这是因为内部系统需要一些宏标记,但需要从字符串中删除所有HTML。
我有部分工作,但它也删除了标签之间的细节,例如它也会从内部删除'word':
<span>word</span>
我的正则表达式是:
(<[^&]*>)|( )
可以通过示例文本找到:
答案 0 :(得分:3)
<[^&]*>
匹配<>
之间的任何字符串,只要它没有&
即可。您希望匹配其中没有&
和>
的任何字符串。请使用<[^&>]*>
。 (另一种方法是使用其他答案中提到的惰性标志)。
顺便说一下,这个输入字符串的预期行为是什么?
some text <a title="a & b">hello</a>
您当前的正则表达式与此字符串中的开始锚标记不匹配,因为它包含&
。但是我相信只有当&
紧跟<
后才关注&
,对吗?
在这种情况下,您只需要确保第一个字符不是(<[^&].*?>)
|
但这不符合空标签;如果您关心空标签,请使用(<[^&].*?>|<>)
{{1}}
答案 1 :(得分:1)
您应该在星号后添加?
非贪婪,并在第一次出现>
时停止:(<[^&]*?>)|( )