如何删除除img以外的所有html标签?
我收到了一些html文本,其中包含各种html标签,如<table>, <a>, <img>
等。如何删除除img以外的所有html标签?
现在我想使用正则表达式来删除除<img ...>
和</img>
(和大写<IMG></IMG>
)之外的所有html标记。
如何做到这一点?
UPDATE:
我的任务很简单,它只是打印文本内容(包括图片)一个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>
谢谢大家!
我尝试了很多,这正则表达式似乎为我工作:
(?i)<(?!img|/img).*?>
我的代码是:
html.replaceAll('(?i)<(?!img|/img).*?>', '');
<(img|IMG)*>*</(img|IMG)>
@mathk,谢谢。你的代码是匹配img标签(我是对吗?),但我想要做的是匹配非img标签。 – Freewind 2010-07-21 08:17:55
你可以忽略案例 – abatishchev 2010-07-21 08:18:37
@Freewind然后将其替换为空字符串 – mathk 2010-07-21 08:22:31
不要使用正则表达式来解析HTML。请参阅here以了解原因。
为您的语言/平台使用HTML解析器。
- Here是一个java一个(HTML解析器)
- 对于.NET的HTML Agility Pack建议
- 对于红宝石,有nokogiry,虽然我不是一个Ruby开发,所以不知道如何好的是
@已付,谢谢。我不解析html,这对我简单的任务来说太重了。我认为正则表达式是最好的工具,但我不知道该怎么写:) – Freewind 2010-07-21 08:16:34
@Freewind - 作为我发布的第一个链接,HTML不是一种常规语言,并且_cannot_可以被RegEx可靠地解析。你应该使用正确的工具来完成这项工作。如果你知道_exactly_什么格式你的HTML将进入,字符串替换甚至可能是足够的... – Oded 2010-07-21 08:18:46
我仍然想使用正则表达式。我不需要完全相同的处理,它大多数时间工作可以 – Freewind 2010-07-21 08:31:54
一个简单的答案为什么不使用正则表达式是:
正则表达式不能解析递归语法如:
S -> (S)
S -> Empty
因为这种语法有无限状态。
由于HTML具有递归语法,因此可以简单地使用regexp。
但在你的情况下,你可以表达一个不递归的正则表达式。
步骤1 ...不使用正则表达式:) – 2010-07-21 08:06:22
唐为此使用正则表达式。你使用什么编程语言? – 2010-07-21 08:06:32
+1,因为知道为什么你不应该这样做:) – willcodejavaforfood 2010-07-21 08:09:56