REGEX用于链接显示文本中的术语

时间:2011-06-06 21:50:25

标签: regex coldfusion

我有一个我继承的应用程序,它在显示的文本中动态构建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>

1 个答案:

答案 0 :(得分:2)

将正则表达式中的第一个(\ W)更改为([^ = \ w&gt;]),将第二个更改为([^ = \ w&lt;])

<cfset Output = REReplaceNoCase(Variables.Output, "(?![</]#w#>)([^=\w>])(#w#)([^=\w<])", "\1<a href=""Display.cfm?Term=#urlencodedformat(w)#"">\2</a>\3", "one") />