簡體   English   中英

正則表達式嵌套括號在一種情況下不起作用

[英]Regex nested parentheses not working in one case

使用正則表達式中的 C# 分組構造,可以匹配嵌套括號內的內容,如該響應所示。 以下代碼正確返回(b/(2c))(abc)

st = "Test(b/(2c)) some (abc) test.";
foreach (Match mt in Regex.Matches(st, @"\((?>\((?<DEPTH>)|\)(?<-DEPTH>)|.?)*(?(DEPTH)(?!))\)"))
{
    Console.WriteLine(mt.Value);
}

但是,當我將模式更改為@"(?<=/)\\((?>\\((?<DEPTH>)|\\)(?<-DEPTH>)|.?)*(?(DEPTH)(?!))\\)" ,只需在上述模式之前添加(?<=/)即可得到僅以/開頭的括號,我希望僅獲得(2c)但我得到(2c))並加上一個額外的) 我想念的是什么? 注意:如果我的輸入字符串是Test(b)/(2c) some (abc) test. 那么我的新模式僅會正確返回(2c)

*字符是貪婪的 ,它會盡可能多的,這就是為什么第二場比賽)字符匹配。

為避免這種情況,您可以更改. [^)]以匹配所有非)字符:

Regex.Matches(st, @"(?<=\/)\((?>\((?<DEPTH>)|\)(?<=-DEPTH>)|[^)])*(?(DEPTH)(?!))\)")

它會匹配(2c) - 例子


另外,您可以添加? *(?<=-DEPTH>)|.)*? 所以*是懶惰的. 將盡可能少地匹配。

Regex.Matches(st, @"(?<=\/)\((?>\((?<DEPTH>)|\)(?<=-DEPTH>)|.)*?(?(DEPTH)(?!))\)")

它也將與(2c) 示例匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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