如何使用正则表达式模式从HTML页面中删除一段代码?

时间:2015-06-23 05:42:23

标签: java html regex string

我从网站上提取一些信息。

不幸的是,代码非常有条理,一些代码片段(XML和样式)出现在HTML结构的中间。

我使用Java将所有HTML代码放在一个字符串中,我想摆脱这样的事情:

<!--[if gte mso 9]><xml>
 <o:OfficeDocumentSettings>
  <o:AllowPNG/>
 </o:OfficeDocumentSettings>
</xml><![endif]-->

(此代码显示在页面的一部分中......)

或更复杂的,如:

<!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:EnableOpenTypeKerning/>
   <w:DontFlipMirrorIndents/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
 </w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
    {mso-style-name:"Table Normal";
    mso-tstyle-rowband-size:0;
    mso-tstyle-colband-size:0;
    mso-style-noshow:yes;
    mso-style-priority:99;
    mso-style-parent:"";
    mso-padding-alt:0in 5.4pt 0in 5.4pt;
    mso-para-margin-top:0in;
    mso-para-margin-right:0in;
    mso-para-margin-bottom:10.0pt;
    mso-para-margin-left:0in;
    line-height:115%;
    mso-pagination:widow-orphan;
    font-size:11.0pt;
    font-family:"Calibri","sans-serif";
    mso-ascii-font-family:Calibri;
    mso-ascii-theme-font:minor-latin;
    mso-hansi-font-family:Calibri;
    mso-hansi-theme-font:minor-latin;
    mso-bidi-font-family:"Times New Roman";
    mso-bidi-theme-font:minor-bidi;
    mso-fareast-language:EN-US;}
</style>
<![endif]-->

也出现在同一页面上。

我注意到了if和endif标签,所以我尝试使用replaceall函数删除包含该模式的字符串的每个部分。

我使用以下模式: html = html.replaceAll("(<!--(.*)-->)*?", "");

我也试过这个: html = html.replaceAll("(<!--(.*)-->)", ""); html = html.replaceAll("(<!--(.*)<!\\[endif\\]-->)", "");

它们非常模糊,但我尝试过的其他变体根本不起作用。

不幸的是,这些都不起作用,因为他们只删除了第一个,但大的那个仍在那里...

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要使正则表达式与换行符匹配。

html = html.replaceAll("(?s)<!--.*?-->", "");