SQL Server:包含括号的模式,并排除所有其他字符

时间:2014-09-23 07:16:55

标签: sql-server regex tsql sql-server-2005 pattern-matching

我在SQL Server 2005中的@ProductDescription_Glossary上执行模式匹配以替换完整的单词。

@GlossaryKeyword变量包含要匹配和替换的单词。

以下代码替换@GlossaryKeyword开头,结尾和末尾的@ProductDescription_Glossary,但如果@ProductDescription_Glossary在开头或结尾包含括号,则此代码无法成功处理替换单词

案例1:此案例工作正常 - Heather未被替换为带有Heatherd一词的工具提示链接

@GlossaryKeyword = Heather
@ProductDescription_Glossary = Heathered
案例2:这种情况失败 - 在这种情况下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 

1 个答案:

答案 0 :(得分:0)

就像()到

一样
select PATINDEX('%[^a-z(]'+ 'Heather' + '[^a-z)]%', '(Heathered red, purple, royal and navy)')

它不是正则表达式。
你想要排除( - 不包括。