Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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';s";“全部替换”;用于删除<;p>;html标记及其内容是否来自html字符串?_Java_Html_Regex - Fatal编程技术网

什么正则表达式将使用Java';s";“全部替换”;用于删除<;p>;html标记及其内容是否来自html字符串?

什么正则表达式将使用Java';s";“全部替换”;用于删除<;p>;html标记及其内容是否来自html字符串?,java,html,regex,Java,Html,Regex,什么正则表达式将与JavareplaceAll()方法一起操作,以从html字符串中删除html标记及其标记之间的内容 比如说,应用了这个方法之后, "<div><p>table <b>test</b> title</p><table><tbody><tr><td>this is table cell value</td></tr></tbody><

什么正则表达式将与Java
replaceAll()
方法一起操作,以从html字符串中删除
html标记及其标记之间的内容

比如说,应用了这个方法之后,

"<div><p>table <b>test</b> title</p><table><tbody><tr><td>this is table cell value</td></tr></tbody></table><p>miscellaneous contents</p><span>blah</span></div>"
“表格测试标题

这是表格单元格值杂项内容

废话”
变成:

"<div><table><tbody><tr><td>this is table cell value</td></tr></tbody></table><span>blah</span></div>"
“这是表格单元格值blah”
注意:这是一个“学术”练习。我不是在寻找一个使用XML/HTML解析器的解决方案


更新: 正在接近解决此问题的方法(谢谢,jlordo!)。。。你的模式似乎有点奏效

但是,建议的正则表达式字符串(
“*?”
)似乎对包含属性(即,在本例中为“样式”属性)的
标记没有影响,请参见下文

    public static void main(String[] args)
    {
        String htmlstring = "<div><p style='text-align: center; font-style: italic'>[click the <b>submit</b> button to create the new company.]</p><table><tbody><tr><td>this is table cell value</td></tr></tbody></table><p>miscellaneous contents</p><span>blah</span></div>";
        htmlstring = htmlstring.replaceAll("<[pP]>.*?</[pP]>", "");
    }
publicstaticvoidmain(字符串[]args)
{
字符串htmlstring=“

[单击提交按钮创建新公司。]

这是表格单元格值杂项内容blah”; htmlstring=htmlstring.replaceAll(“*”,“); }
htmlstring(擦洗前):

<div><p style='text-align: center; font-style: italic'>[click the <b>submit</b> button to create the new company.]</p><table><tbody><tr><td>this is table cell value</td></tr></tbody></table><p>miscellaneous contents</p><span>blah</span></div>
<div><p style='text-align: center; font-style: italic'>[click the <b>submit</b> button to create the new company.]</p><table><tbody><tr><td>this is table cell value</td></tr></tbody></table><span>blah</span></div>

[单击提交按钮创建新公司。]

这是表格单元格值杂项内容
htmlstring(擦洗后):

<div><p style='text-align: center; font-style: italic'>[click the <b>submit</b> button to create the new company.]</p><table><tbody><tr><td>this is table cell value</td></tr></tbody></table><p>miscellaneous contents</p><span>blah</span></div>
<div><p style='text-align: center; font-style: italic'>[click the <b>submit</b> button to create the new company.]</p><table><tbody><tr><td>this is table cell value</td></tr></tbody></table><span>blah</span></div>

[单击提交按钮创建新公司。]

这是表格单元格值blah
我们能做些什么来“调整”它,使它处理这个问题吗?

试试看

    htmlstring = htmlstring.replaceAll("(?i)<p.*?>.*?</p>", "");
htmlstring=htmlstring.replaceAll(“(?i.*?”,”);
注意(?i)表示打开不区分大小写的标志

Pattern.compile(
Pattern.compile(
  // A start p tag.
  "<p(?![a-z0-9:\\-])([^>\"']|\"[^\"]*\"|'[^']*)*>"
  + ".*?"   // Phrasing content that does not handle comment, RCDATA or raw text boundaries
  // An end p tag
  + "</p(?![a-z0-9:\\-])[^>]*>",
  Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
//一个起始p标签。 "\"']|\"[^\"]*\"|'[^']*)*>" +“*?”//不处理注释、RCDATA或原始文本边界的措辞内容 //末端p标记 + "]*>", Pattern.DOTALL | Pattern.Pattern不区分大小写);
Pattern.DOTALL
标志将导致
*?
匹配换行符,这是必要的,因为原始正则表达式不会匹配正文中包含换行符的任何段落

模式。不区分大小写
标志是在没有
模式的情况下指定的。UNICODE\u大小写
,因为它是不必要的,而且我不相信土耳其的大小写折叠不会造成微妙的维护危险,如果修改此正则表达式以处理


([^>“]|“[^”]*“|”[^']*)
部分与任何标记体字符或带引号的属性匹配。它将在某些非验证属性名称上出现错误,如
您尝试了什么?还有,你读过这篇文章吗?这对于学术练习来说是非常模糊的。您能否始终保证
标记不包含任何属性?如果不能,属性是否会缺少
符号?收尾标签呢?是否总是会有一个结束标记?如果遇到一个表怎么办?还是另一个开口?标记可以嵌套吗?人们不在HTML上使用正则表达式有一个很好的理由。疯狂在于正则表达式是非常具体的。没有“看起来像
的所有东西”。只有
/您的输入才能包含凌乱的HTML?无法验证的类型?您是否关心那些看起来像
标记的东西,而不是因为它们出现在其他标记(如注释)中,或者出现在特殊标记(如
)的主体中?您是否关心未关闭的
标记?嗨,Frankie-您能否发布如何转义您提供的字符串,以便它在Java中工作?另外,您能否提供一个简短/简洁的解决方案来使用java api简单地删除“”标记?嗨,迈克,我们不关心未关闭的“”标记。我们使用的html将在尝试“replaceAll”之前进行验证。答对了。。。谢谢,叶甫盖尼!!!提前知道我正在使用的html字符串的性质(简短和基本)使单行replaceAll()正则表达式解决方案成为最佳选择--使用“xml解析器”解决方案创建一些兽性方法来执行相同的简单操作的想法似乎很愚蠢。无论如何,再次谢谢你!谢谢你的帮助,迈克。还有,关于nice文档,也就是说,当我了解更多关于regex的信息时,我希望参考这些文档。现在,我选择了Evgeny提供的较短长度的解决方案,因为它适合我非常狭窄的应用程序需求-再次谢谢@赛姆,祝你研究顺利。作为参考,处理凌乱(且不受信任)的HTML时使用特殊字符,然后使用一系列较小的正则表达式分解为标记、注释、属性等。