我正在尝试使用以下字符串获取服务器名称的正则表达式模式:
/SERVER "\"TEST_SERVER\""
有时会省略引号和反斜杠,因此字符串看起来像:
/SERVER TEST_SERVER
在这两种情况下,我只想匹配TEST_SERVER
。
我的模式看起来像这样:
(?<=/SERVER ("\\")?)\S+(?=(\\"")?)
但是当它有引号和反斜杠时,这只匹配整个字符串"\"TEST_SERVER\""
。我在这做错了什么?
我在C#中这样做,这是我的代码:
string input2 = "/SERVER \"\\\"TEST_SERV\\\"\"";
string pattern = @"(?<=/SERVER (""\\"")?)\S+(?=(\\"""")?)";
Console.WriteLine("pattern=" + pattern);
Console.WriteLine("input=" + input2);
Regex regEx = new Regex(pattern);
MatchCollection matches = regEx.Matches(input2);
foreach (var match in matches)
{
Console.WriteLine(match.ToString());
}
Console.ReadKey();
答案 0 :(得分:1)
您可以尝试使用以下正则表达式匹配字符串TEST_SERVER
,
(?<=\/SERVER\s*(?:["\\]+)?)\w+(?=(?:[\\"]+|$))
C#代码将是,
String input = @"/SERVER ""\""TEST_SERVER\""""";
Regex rgx = new Regex(@"(?<=\/SERVER\s*(?:[""\\]+)?)\w+(?=(?:[\\""]+|$))");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[0].Value);
答案 1 :(得分:1)
请尝试以下方法:
string input1 = @"/SERVER TEST_SERVER";
string input2 = @"/SERVER ""\""TEST_SERVER\""""";
string pattern = @"^/SERVER (""\\"")?(?<NAME>.+?)(\\"""")?$";
var regEx = new Regex(pattern);
Console.WriteLine(regEx.Match(input1).Groups["NAME"].Value);
Console.WriteLine(regEx.Match(input2).Groups["NAME"].Value);