我找到了一个可行的解决方案来删除所有html标签,如下所示:
<cfset test = rereplace(blah, "<h2[^>]*>", "", "ALL") />
我需要生成一个 xml 文件并在使用 XMLFormat() 格式化后重命名一些标签。因此,我尝试了以下方法:
<!--- example string --->
<cfset blah = '<h1>title 1</h1>
<h2 style="color: black;">title 2</h2>
<h3>test</h3>' />
<cfset test = rereplace(blah, "<h2[^>]*>", "<title_2>", "ALL") />
这会根据需要更改我的标签,但它不会停留在>部分?...我也试图像这样逃离<h2[^>]*>
号,但这似乎没有帮助。
XML 后不能使用 >
,因为该字符不再存在于文本中的任何位置。
开头的 h2 标签,但不会匹配/替换结束
的标签:<cfset test = blah.replaceAll('<h2((?:[^&]+|&(?!gt))*)>','<title_2$1>') />
其中的关键部分是:(?:[^&]+|&(?!gt))*
它匹配非 & 字符或不后跟 gt
的 & 符号,直到找到标签的结尾。
要更改整个标签,您需要:
<cfset test = blah.replaceAll('<h2((?:[^&]+|&(?!gt))*)>((?:[^&]+|&(?!lt;/h2))*)</h2>','<title_2$1>$2</title_2>') />
这重复了与上述相同的概念,以查找结束的 h2 标记,同时将内容捕获到适当的组。
在这个阶段,你开始进入正则表达式的领域,可能不是这项工作的最佳工具 - 你能在格式化之前用XML解析器做这些更改吗?
<cfset test = rereplace(blah, "<h2[^>]*>", "<title_2>", "ALL") />
<!--- there is no [^>] for you to match --->
应该是
<cfset test = rereplace(blah, "<h2[^&]*>", "<title_2>", "ALL") />
我认为[^
部分可以防止它贪婪。