环境:Visual Studio 2008 SP1
我怎么写下面的正则表达式?
我正试图去'目标字符串。模式是[name] =''之间的任何字符串
/*Input String*/
SET [blah] = 'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='target string'
/*Current Regex*/
(?<=[?name]?=).*(?=\')
/*Current Results*/
'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='target string
/*Desired Results*/
'target string
这样做吗?
(?<=\[name]=).*?(?=')
或者如果必须在没有前导(')的情况下返回目标字符串:
(?<=\[name]=').*?(?=')
注意:我假设目标字符串没有转义撇号('')。
编辑:这与转义的撇号有关:
(?<=\[name]=)(''|.)+?(?='([^']|$))
它会找到“'John''s pub
”
SET [blah] = 'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='John''s pub'
你需要转义方括号,否则它们会被误解为创建一个字符类。也就是说,你需要:
(?<=\[?name\]?=).*(?=\')
我还建议将.*
更改为更明确的'[^']*
,这样你就不会冒险在目标字符串之后捕获任何东西; Tim Pietzcker指出(在一条现已删除的评论中)你可以写'
而不是\'
(接近正则表达式的末尾);所以:
(?<=\[?name\]?=)'[^']*(?=')