【发布时间】:2009-10-13 01:31:08
【问题描述】:
我正在努力改进自定义 CMS 中的词汇表功能,该 CMS 在 IIS 上使用 VBScript 代码运行经典 ASP (ASP 3.0)。我被一个我无法解决的正则表达式挑战难住了。
这是当前代码:
If InStr(ART_ArticleBody, "href") = False then
sql="SELECT URL, Term, RegX FROM GLOSSARYDB;"
Set rsGlossary = Server.CreateObject("ADODB.Recordset")
rsGlossary.open sql, strSQLConn
Set RegExObject = New RegExp
While Not rsGlossary.EOF
URL = rsGlossary("URL")
Phrase = rsGlossary("RegX")
With RegExObject
.Pattern = Phrase
.IgnoreCase = true
.Global = false
End With
set expressionmatch = RegExObject.Execute(ART_ArticleBody)
if expressionmatch.count > 0 then
For Each expressionmatched in expressionmatch
RegExObject.Pattern = Phrase
URL = "<a href=" & URL & ">"& expressionmatched.Value & "</a>"
ART_ArticleBody = RegExObject.Replace(ART_ArticleBody, URL)
next
end if
rsGlossary.movenext
wend
rsGlossary.movefirst
Set RegExObject = nothing
end if
我不想像上面的代码那样跳过将词汇表链接放在任何包含href的文章中,而是想更改代码以处理每篇文章,但让RegEx模式避免匹配如果匹配在 a 标签内,则在词汇表条目上。
例如,下面的斜体字是我的数据库中此正则表达式条目的测试示例:ROI|return on investment|investment return
这是一个使用术语表的链接:<a href="ROI.htm">Info on return on investment</a>.
现在,这里是纯文本的词汇表术语,而不是链接内部:return on investment。
我们想找到匹配的第三个实例,但找不到前两个,因为它们都在 HTML 链接中。
在上面的文本中,如果我正在处理词汇表条目“ROI|投资回报|投资回报”的文章,我不想匹配第一次或第二次匹配,因为它们位于 a 标签中。我需要正则表达式模式来跳过这些匹配项,只匹配不在 a 标签内的任何内容。
对此的任何帮助将不胜感激。
【问题讨论】:
-
-
因此,给定一组可能的短语,您想找到其中任何不属于
<a></a>的所有实例? -
因此,例如,我希望 REGEX 不匹配: 但我希望它匹配此应收帐款|未在 标记内时的应收帐款
标签: regex asp-classic vbscript