【发布时间】:2014-11-17 07:24:38
【问题描述】:
我在 SQL Server 2005 中对 @ProductDescription_Glossary 执行模式匹配以替换完整的单词。
@GlossaryKeyword 变量包含要匹配和替换的单词。
以下代码替换@ProductDescription_Glossary开头、结尾和结尾处的@GlossaryKeyword,但如果@ProductDescription_Glossary在单词开头或结尾包含括号,则此代码无法成功处理替换
案例 1:此案例工作正常 - Heather 没有被替换为带有单词 Heatherd 的工具提示链接
@GlossaryKeyword = Heather
@ProductDescription_Glossary = Heathered
案例 2:这种情况失败 - 在这种情况下,Heather 被替换,我的要求是,heather 不会被替换,就像案例 1 一样,因此请为我提供所需的模式。
@GlossaryKeyword = Heather
@ProductDescription_Glossary = (Heathered
提前致谢。
注意:@GlossaryKeyword 仅包含字母数字、连字符和 / 字符 i,e (0-9, A-Z, a-z, -, /)
@ProductDescription_Glossary 包含 HTML 标签,默认处理(可能是我服务器上的排序规则设置所致)
代码:
if PATINDEX ('%[^a-z]' + @GlossaryKeyword + '[^a-z]%','.' + @ProductDescription_Glossary + '.') > 0
BEGIN
SET @ProductDescription_Glossary = REPLACE(@ProductDescription_Glossary,@GlossaryKeyword, '<a target="_blank" id="q_' + CAST (@GlossaryID AS VARCHAR(10)) + '" class="anchor_regular_Mehroon" href="javascript: void(0);">' + @GlossaryKeyword + '</a>')
SET @GlossaryToolTip = @GlossaryToolTip + '<div id="a_q_' + CAST (@GlossaryID AS VARCHAR(10)) + '" class="toolTip_glossary" style="display:none;">' + @GlossaryKeywordDescription + '</div>'
END
【问题讨论】:
-
首先,
PATINDEX()不支持 RegEx - 它只进行通配符匹配。第二:我添加了变量定义,执行,它按预期工作.. -
@marc_s,我想要那个(当出现以下情况时,Heathered 不会被替换。SET ProductDescription_Glossary = ',poly(Heathered 红色、紫色、皇家和海军)';SET GlossaryKeyword = 'Heather'
标签: sql-server regex tsql sql-server-2005 pattern-matching