我有一個像"(?<opening>\[)?(?<body>\w )(?<closing>\])?".
這是在 .NET 中。
目前打開和關閉都是可選的和獨立的。
所以問題是:是否可以closing僅opening在遇到時進行匹配,否則視為不匹配?
目前它匹配所有可能的變體:body, [body, body], [body]。
但我的目標是匹配body或[body]
PS我知道可以通過((?<opening>\[)(?<body>\w )(?<closing>\])|(?<body>\w )),
但我的實際<body>模式非常大而且復雜,無法像那樣復制它。
uj5u.com熱心網友回復:
對于當前場景,您可以使用
(?:(?<o>\[)|(?<!\[))\b(?<body>\w )(?(o)(?<c>])|(?![]\w]))
請參閱.NET 正則運算式演示。詳情:
(?:(?<o>\[)|(?<!\[))\b- 一個單詞邊界(它在這里作業,因為下一個模式部分匹配一個單詞字符)(?<body>\w )- 組“body”:一個或多個單詞字符(?(o)(?<c>])|(?![]\w]))- 一個條件構造,如果 Group "o" 堆疊不為空,(?<c>])匹配并捕獲到 Group "c" 一個]字符,|- 否則(如果“o”組不匹配)(?![]\w])- 要求]在當前位置的右側沒有和字符字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/334568.html
