【问题标题】:Remove from <!--[if gte mso 9]> to <![endif]--> in HTML [REGEX, RUBY]在 HTML [REGEX, RUBY] 中从 <!--[if gte mso 9]> 到 <![endif]--> 删除
【发布时间】:2016-12-29 15:09:58
【问题描述】:

我有一个带有 标签的 HTML 文本。我想删除这两个标签之间的所有内容。 我正在使用带有 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 在线正则表达式测试器,这似乎是正确的方法,但它不适用于我的程序!

请帮忙!

提前致谢!

【问题讨论】:

    标签: html ruby regex if-statement replace


    【解决方案1】:

    试试这个正则表达式/(?&lt;=&lt;!--\[if gte mso 9\]&gt;).*?(?=&lt;!\[endif\]--&gt;)/m,并在字符串上执行gsub。你会得到&lt;!--[if gte mso 9]&gt;&lt;![endif]--&gt;

    • (?&lt;=&lt;!--\[if gte mso 9\]&gt;) 是一个正面的外观,它匹配 &lt;!--\[if gte mso 9\]&gt; 字符串,但不包含在结果中。

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

    • (?=&lt;!\[endif\]--&gt;) 是一个正向期待,它与&lt;!\[endif\]--&gt; 匹配,但不包含在结果中。

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

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

    在您的正则表达式/(?=&lt;!\-\-\[if gte mso 9\]&gt;)(.*?)(?&lt;=&lt;!\[endif\]\-\-&gt;)/ 中,您对第一个标签使用了正向展望,对第二个标签使用了正向展望,您需要翻转它们。

    • 正向向前匹配主表达式之后的组,但不将其包含在结果中。

    • Positive Look behind 匹配主表达式之前的组,但不将其包含在结果中。

    【讨论】:

    • 我认为您的意思是.*,而不是.0。但是你应该像 OP 一样使用.*?
    • 太棒了!非常感谢!一分钟解决!
    • 很好的答案!如何将其修改为包含 作为捕获的一部分?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多