我有一个HTML文本,带有和标记我想删除这两个标签之间的所有内容。
我将ruby函数gsub与Regex表达式一起使用,但它不起作用。
这就是我尝试过的:

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测试,这似乎是正确的方法,但它不会对我的程序起作用!
请帮忙!
提前谢谢!

最佳答案

尝试使用这个regex/(?<=<!--\[if gte mso 9\]>).*?(?=<!\[endif\]-->)/m,并对字符串执行gsub您将得到<!--[if gte mso 9]><![endif]-->
(?<=<!--\[if gte mso 9\]>)是一个正面的查找,它与<!--\[if gte mso 9\]>字符串匹配,但不包含在结果中。
.*匹配任何字符0次或多次。
(?=<!\[endif\]-->)是一个积极的展望,它与<!\[endif\]-->匹配,但不包含在结果中。
末尾的m标识符表示匹配的多行字符串因为您用“”声明了字符串,\n将被解释为一个新行。
本质上,您正在匹配两个标记之间的所有内容。
在regex中,/(?=<!\-\-\[if gte mso 9\]>)(.*?)(?<=<!\[endif\]\-\->)/,您对第一个标记使用正向展望,对第二个标记使用正向展望,您需要翻转它们。
“正向向前”匹配主表达式后面的组,但不将其包含在结果中。
正的look behind在主表达式之前匹配一个组,而不将其包含在结果中。

07-26 02:37