我的HTML文本为<! - [if gte mso 9]>和<![endif] - >标签。我想删除这两个标签之间的所有内容。 我正在使用带有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测试版,它似乎是正确的方法,但它不适用于我的程序!
请帮忙!
提前致谢!
答案 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\]\-\->)/
中,您使用了第一个标记的正面期待,并且第二个标记的正面外观,您需要翻转它们。
正面向前匹配主表达式后的组,而不将其包括在结果中。
正面背后与主表达式之前的组匹配,而不在结果中包含它。