在HTML [REGEX,RUBY]中从<! - [if gte mso 9]>移到<![endif] - >

时间:2016-08-22 23:20:40

标签: html ruby regex if-statement replace

我的HTML文本为&lt;! - [if gte mso 9]&gt;和&lt;![endif] - &gt;标签。我想删除这两个标签之间的所有内容。 我正在使用带有Regex表达式的ruby函数gsub,但它不起作用。

这是我尝试过的:

text = "<!--[if gte mso 9]><xml>\n <w:WordDocument>\n [...] \n</style>\n<![endif]-->"

text2 = text.gsub /(?=<!\-\-\[if gte mso 9\]>)(.*?)(?<=<!\[endif\]\-\->)/, ""

我想要的答案是:

text2 = "<!--[if gte mso 9]><![endif]-->"

甚至:

text2 = ""

我是根据this article

尝试过的

我已经尝试了this在线Regex测试版,它似乎是正确的方法,但它不适用于我的程序!

请帮忙!

提前致谢!

1 个答案:

答案 0 :(得分:3)

尝试使用此正则表达式/(?<=<!--\[if gte mso 9\]>).*?(?=<!\[endif\]-->)/m,并对字符串执行gsub。您将获得<!--[if gte mso 9]><![endif]-->

  • (?<=<!--\[if gte mso 9\]>)背面是正面的,与<!--\[if gte mso 9\]>字符串匹配,但不会在结果中包含它。

  • .*匹配任何字符0次或更多次。

  • (?=<!\[endif\]-->)是一个积极的期待,与<!\[endif\]-->匹配,但不会在结果中包含它。

  • 末尾的m标识符表示匹配多行字符串。由于您使用&#34;&#34;声明了字符串,\n将被解释为新行。

基本上,您要匹配两个标签之间的所有内容。

在正则表达式/(?=<!\-\-\[if gte mso 9\]>)(.*?)(?<=<!\[endif\]\-\->)/中,您使用了第一个标记的正面期待,并且第二个标记的正面外观,您需要翻转它们。

  • 正面向前匹配主表达式后的组,而不将其包括在结果中。

  • 正面背后与主表达式之前的组匹配,而不在结果中包含它。