[英]Regex always matching 0 if possible when using the '?' quantifier?
我正在做一個正則表達式模式,嘗試從以下字符串獲取服務器名稱:
/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();
您可以嘗試使用以下正則表達式來匹配字符串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);
請嘗試以下操作:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.