[英]Regex to find matches from a string having multiple square brackets
我有一個如下所示的段落:
測試[!#today]的一些措辭[!condition]不滿足這個措辭[!ShowElemIf:// Student / FullName; [[[文字未被完全識別]]]; /名字]但發現有年齡的簡單標簽[!ShowElemIf://學生/年齡; xml //學生/ DOB / @格式化; y]
我需要從上面找到所有占位符/標簽,例如:[!tag]使用C#。 我嘗試使用正則表達式,但它無法找到具有“FullName”字樣的標記,如上面的粗體突出顯示。
List<string> tags = Regex.Matches( sampleText.Replace(Environment.NewLine, ""), @"\\[!([^]]+)\\] ") .Cast<Match>() .Select(x => x.Groups[1].Value) .ToList();
使用此RegEx我可以在下面找到,但不能突出顯示。
您需要使用.NET regex中提供的平衡組 :
@"\[!((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))]"
請參閱正則表達式演示
細節 :
\\[!
- 一個[!
子 ((?:[^][]+|(?<o>\\[)|(?<-o>)])*(?(o)(?!)))
- 捕獲組1匹配
(?:
- 一個有3種選擇的非捕獲組:
[^][]+|
- 除[
和]
以外的1個或多個字符,或 (?<o>\\[)|
- [
推入“o”組堆棧,或 (?<-o>)]
- a ]
)*
- 零次或多次出現 (?(o)(?!)))
- 檢查“o”組堆棧是否為空的條件構造。 如果為空,則匹配繼續,否則,不返回匹配。 ]
-文字閉合]
符號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.