簡體   English   中英

如果可能,使用'?'時,正則表達式始終匹配0。 量詞?

[英]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);

IDEONE 1 IDEONE 2

請嘗試以下操作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM