正则表达式匹配“目标字符串”

时间:2012-01-11 19:35:05

标签: c# regex

环境: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

2 个答案:

答案 0 :(得分:3)

你需要转义方括号,否则它们会被误解为创建一个字符类。也就是说,你需要:

(?<=\[?name\]?=).*(?=\')

我还建议将.*更改为更明确的'[^']*,这样您就不会冒险在目标字符串后捕获任何; Tim Pietzcker指出(在一条现已删除的评论中)你可以写'而不是\'(接近正则表达式的末尾);这样:

(?<=\[?name\]?=)'[^']*(?=')

答案 1 :(得分:1)

这样做吗?

(?<=\[name]=).*?(?=')

或者如果必须在没有前导(')的情况下返回目标字符串:

(?<=\[name]=').*?(?=')

注意:我假设目标字符串没有转义撇号('')。


编辑:这就是使用转义撇号的技巧:

(?<=\[name]=)(''|.)+?(?='([^']|$))

它会在

中找到“'John''s pub
SET [blah] = 'AE', [blah] = 'A1A', [number] = 004 WHERE [name]='John''s pub'