问题描述
|
我有一个继承的应用程序,可以在显示的文本内动态构建HREF链接。直到我们最近进行了数据库更改,并且链接的术语列表开始以不同的顺序从查询中返回之前,一切似乎都工作良好。这暴露了现有REGEX中的一个错误,该错误试图将HREF链接放置在预先存在的HREF中。仅仅强行在条款列表上进行新的排序是不可行的。一个术语可能只是一个单词,可能是多个单词,甚至可能是使用HTML格式化的单词。
我需要在REGEX中进行哪些调整,以使其忽略A元素的HREF属性中的术语?这是我所指的示例:
<cfset Output = \"This is some sample text to show the problem when we have term1 term2.\" />
<cfloop index=\"w\" list=\"sample;term1 term2;term1\" delimiters=\";\">
<cfset Output = \".\" & Variables.Output & \".\" />
<cfset Output = REReplaceNoCase(Variables.Output,\"(?![</]#w#>)(\\W)(#w#)(\\W)\",\"\\1<a href=\"\"display.cfm?Term=#urlencodedformat(w)#\"\">\\2</a>\\3\",\"one\") />
<cfset Output = Mid(Variables.Output,2,Len(Variables.Output)-2) />
</cfloop>
<cfoutput>#Variables.Output#</cfoutput>
解决方法
将正则表达式中的第一个(\\ W)更改为([^ = \\ w>]),第二个更改为([^ = \\ w <])
<cfset Output = REReplaceNoCase(Variables.Output,\"(?![</]#w#>)([^=\\w>])(#w#)([^=\\w<])\",\"\\1<a href=\"\"Display.cfm?Term=#urlencodedformat(w)#\"\">\\2</a>\\3\",\"one\") />