[英]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.