ColdFusion:重新替换 xml 格式的 html-tags 正则表达式



我找到了一个可行的解决方案来删除所有html标签,如下所示:

<cfset test = rereplace(blah, "<h2[^>]*>", "", "ALL") />

我需要生成一个 xml 文件并在使用 XMLFormat() 格式化后重命名一些标签。因此,我尝试了以下方法:

<!--- example string --->
<cfset blah = '&lt;h1&gt;title 1&lt;/h1&gt;
               &lt;h2 style="color: black;"&gt;title 2&lt;/h2&gt;
               &lt;h3&gt;test&lt;/h3&gt;' />
<cfset test = rereplace(blah, "&lt;h2[^>]*&gt;", "<title_2>", "ALL") />

这会根据需要更改我的标签,但它不会停留在>部分?...我也试图像这样逃离&lt;h2[^>]*&gt;号,但这似乎没有帮助。

格式化

XML 后不能使用 >,因为该字符不再存在于文本中的任何位置。

这将匹配/替换

开头的 h2 标签,但不会匹配/替换结束

的标签:
<cfset test = blah.replaceAll('&lt;h2((?:[^&]+|&(?!gt))*)&gt;','<title_2$1>') />

其中的关键部分是:(?:[^&]+|&(?!gt))*

它匹配非 & 字符或不后跟 gt 的 & 符号,直到找到标签的结尾。

要更改整个标签,您需要:

<cfset test = blah.replaceAll('&lt;h2((?:[^&]+|&(?!gt))*)&gt;((?:[^&]+|&(?!lt;/h2))*)&lt;/h2&gt;','<title_2$1>$2</title_2>') />

这重复了与上述相同的概念,以查找结束的 h2 标记,同时将内容捕获到适当的组。

在这个阶段,你开始进入正则表达式的领域,可能不是这项工作的最佳工具 - 你能在格式化之前用XML解析器做这些更改吗?

<cfset test = rereplace(blah, "&lt;h2[^>]*&gt;", "<title_2>", "ALL") /> 
<!--- there is no [^>] for you to match --->

应该是

<cfset test = rereplace(blah, "&lt;h2[^&]*&gt;", "<title_2>", "ALL") />

我认为[^部分可以防止它贪婪。

最新更新