正则表达式匹配两个可能包含另一个字符串的字符串

时间:2014-08-29 10:57:06

标签: c# regex

我正在尝试匹配以下字符串的正则表达式:

.\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();

1 个答案:

答案 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);

IDEONE