我有一个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在主表达式之前匹配一个组,而不将其包含在结果中。