我正在尝试匹配以下字符串的正则表达式:
.\SQL2012
从两个字符串(它们包含在另一个更大的字符串中,但在这种情况下无关紧要):
/SERVER "\".\SQL2012\""
/SERVER .\SQL2012
因此,在某些情况下,之前的"\"
和匹配之后的\""
都可以省略。我提出的正则表达式(来自StackOverflow上的上一个问题)如下:
(?<=\/SERVER\s*(?:[""\\""]+)?)\w+(?=(?:[\\""""]+|$)| )
如果我尝试匹配TEST_SERVER
而不是.\SQL2012
(因为\w
与特殊字符不匹配),这样可行。有没有办法在\""
或空格出现之前匹配任何内容?
我在C#中这样做,这是我的代码:
string input = "/SERVER \"\\\".\\SQL2012\\\"\"";
string pattern = @"(?<=\/SERVER\s*(?:[""\\""]+)?)\w+(?=(?:[\\""""]+|$)| )";
Regex regEx = new Regex(pattern);
MatchCollection matches = regEx.Matches(input);
foreach (Match match in matches)
{
Console.WriteLine(match.ToString());
}
Console.ReadKey();
答案 0 :(得分:1)
在前瞻中添加单词边界\b
,
string input = "/SERVER .\\SQL2012";
Regex rgx = new Regex(@"(?<=\/SERVER\s+""\\"").*?\b(?=\\""""|$| )|(?<=\/SERVER\s+).*?\b(?= |$)");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[0].Value);
Console.WriteLine(input);