我正在使用C#并希望在我的代码中使用以下正则表达式:
sDatabaseServer\s*=\s*"([^"]*)"
我把它放在我的代码中:
Regex databaseServer = new Regex(@"sDatabaseServer\s*=\s*"([^"]*)"", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
我知道你必须在字符串引号内转义所有括号和引号,但由于某种原因,以下内容仍然不起作用:
工作版本:
Regex databaseServer = new Regex(@"sDatabaseServer\s*=\s*""([^""]*)""", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);
任何想法如何让C#看到我的正则表达式只是一个字符串?我知道我知道....简单的问题...对不起我仍然是一个业余的C#...
已解决:谢谢你们!
答案 0 :(得分:5)
当你逃脱括号时,你走得太远了。如果您希望它们是正则表达式元字符(即捕获组),那么您不能逃避它们。否则它们将匹配字面括号。
所以这可能就是你要找的东西:
@"sDatabaseServer\s*=\s*""([^""]*)"""
答案 1 :(得分:1)
string regex = "sDatabaseServer\\s*=\\s*\"([^\"]*)\""
在你的第一次尝试中,你忘了逃避你的报价。但由于它是一个字符串文字,因此使用\
进行转义不起作用。
在我们的第二次尝试中,您转义了引号,但是您没有逃脱空白令牌所需的\
\s
答案 2 :(得分:0)
使用\ x22而不是引号:
string pattern = @"sDatabaseServer\s*=\s*\x22([^\x22]*)\x22";
但是
Ignorepattern空格允许在正则表达式模式中使用注释(#符号)或在多行上分割模式。你没有;除去。
您寻求的更好的模式是
string pattern =@"(?:sDatabaseServer\s*=\s*\x22)([^\x22]+)(?:\x22)";
(?:)匹配但不捕获并且像解析器的锚一样。此外,它假设引号中至少有1个字符,因此使用+而不是*。