我有一些html文本,其中包含各种html标签,例如<table>, <a>, <img>
,等等。
现在我想使用正则表达式删除除<img ...>
和</img>
(以及大写<IMG></IMG>
)之外的所有html标记。
怎么做?
更新
我的任务很简单,它只是在首页打印html的文本内容(包括图像)作为摘要,所以我觉得正则表达式很好而且很简单。
再次更新
也许一个样本会让我的问题更好地理解:)
有一些HTML文字:
<html>
<head></head>
<body>
Hello, everyone. Here is my photo: <img src="xxx.jpg" />.
And, <a href="xxx">know more</a> about me!
</body>
</html>
我想保留,并删除其他标签。以下是我想要的:
Hello, everyone. Here is my photo: <img src="xxx.jpg" />. And, know more about me!
现在我的代码如下:
html.replaceAll("<.*?>", "")
但它会删除<
和>
之间的所有内容,但我希望保留<img xxx>
和</img>
,并删除< and >
之间的其他内容}
感谢大家!
答案 0 :(得分:10)
我尝试了很多,这个正则表达似乎对我有用:
(?i)<(?!img|/img).*?>
我的代码是:
html.replaceAll('(?i)<(?!img|/img).*?>', '');
答案 1 :(得分:4)
不要使用RegEx来解析HTML。请参阅here,了解原因。
为您的语言/平台使用HTML解析器。
答案 2 :(得分:1)
为什么不使用RegEx的简单答案是:
Regexp无法解析递归语法,例如:
S -> (S)
S -> Empty
因为这种语法具有无限状态。
由于HTML具有递归语法,因此您只需使用regexp。
SPAN -> <span>SPAN</span>
SPAN -> text
但在你的情况下,你可以表达一个非递归的正则表达式。
答案 3 :(得分:0)
<(img|IMG)*>*</(img|IMG)>