Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除字符串中HTML标记中的所有HTML属性_Java_Regex_Html Parsing - Fatal编程技术网

Java 如何删除字符串中HTML标记中的所有HTML属性

Java 如何删除字符串中HTML标记中的所有HTML属性,java,regex,html-parsing,Java,Regex,Html Parsing,我试图获取一个包含HTML的字符串,去掉一些标记(img、object)和所有其他HTML标记,去掉它们的属性。例如: <div id="someId" style="color: #000000"> <p class="someClass">Some Text</p> <img src="images/someimage.jpg" alt="" /> <a href="somelink.html">Some Link

我试图获取一个包含HTML的字符串,去掉一些标记(img、object)和所有其他HTML标记,去掉它们的属性。例如:

<div id="someId" style="color: #000000">
   <p class="someClass">Some Text</p>
   <img src="images/someimage.jpg" alt="" />
   <a href="somelink.html">Some Link Text</a>
</div>

一些文本

将成为:

<div>
   <p>Some Text</p>
   Some Link Text
</div>

一些文本

一些链接文本
我正在努力:

string.replaceAll("<\/?[img|object](\s\w+(\=\".*\")?)*\>", ""); //REMOVE img/object
string.replaceAll(“,”)//移除img/对象
我不知道如何剥离标签中的所有属性

任何帮助都将不胜感激


谢谢。

如果您使用SAX或DOM,并获取节点名称和值,并删除所有属性,可能会容易得多。

//
可能有效-获取标记(匹配组)并读取所有属性,直到右括号,并将其仅替换为背景和标签。

您可以删除以下所有属性:

string.replaceAll("(<\\w+)[^>]*(>)", "$1$2");
string.replaceAll(“(]*(>)”,“$1$2”);

此表达式匹配一个打开的标签,但只将其标题<代码> <代码>作为组1和2。<代码> RePraseAs/Cuff>使用这些组的引用将它们加入到输出中,作为<代码> 1×2美元< /代码>。这将删除标签中间的属性。

< P>如果您想筛选特定的标签,我不推荐使用ReXEX。这将是一个地狱般的工作,永远不会完全可靠。使用普通的HTML解析器,如。它提供了清理HTML的API。另请参阅

下面是一个Jsoup帮助下的启动示例,它只允许在下面示例中所选的
白名单
的标准标记集旁边添加
标记

String html=“

一些文本”

”; Whitelist Whitelist=Whitelist.simpleText();//Whitelist.simpleText()允许b、em、i、strong、u。如果要开始清理,请改用Whitelist.none()。 白名单。添加标签(“div”、“p”); String clean=Jsoup.clean(html,白名单); 系统输出打印LN(清洁);
这导致


一些文本

一些链接文本
另见:

我怀疑你是否能做到这一点,这是1个正则表达式。我怀疑你是否能用正则表达式做到这一点。我不需要它是一个正则表达式,只是一些有意义的东西,可以满足我的需要。你建议怎么做?出于某种原因,这会给我一个java.lang.NullPointerException错误。@FanFanFant不应该这样做,除非你的字符串是
null
。在执行任何操作之前,我会检查它是否为null或空。如果我更改了replaceAll部分,它工作正常,因此不确定replaceAll部分发生了什么。@FanFanFavorite能否在调用
replaceAll
之前添加控制台输出或检查调试器中的值?我在联机测试仪中检查了此表达式,然后它的工作方式正是您所需要的。请注意,这并不会删除保留其主体的
标记,如预期结果所示。很难告诉人们,在标记方面,只有极少数正则表达式用户能够使用甚至是简单的正则表达式应用程序。每个人都认为他们都知道,几乎没有人知道。因此,它可以归结为以某种社会可接受的方式说“你不够聪明”,很难用建设性的语言表达。