[英]Capturing Multiple Elements in List Using Regex
我有一個字符串output
,試圖通過使用正則表達式匹配來捕獲項目列表。 字符串如下...
ltm virtual test_vs {
profiles {
foo_bar {
context all
}
baz {
context one
}
qux {
context all
}
}
}
我想要做的是拿出一個正則表達式,它將與整個字符串匹配,並qux
捕獲foo_bar
, baz
和qux
,而無需事先知道這些捕獲的值。 另外,我希望它具有靈活性,因為可以捕獲任意數量的項目。 它們將始終始終位於profiles
方括號之間,並且每個方括號本身都具有打開和閉合的括號,並且context ANYWORD
位於其自己的方括號之間。 我到目前為止所擁有的是...
List<String> itemList = new ArrayList<>();
regex = "ltm\\svirtual\\stest_vs\\s\\{\\s*\\n\\s*profiles\\s\\{"+TODO;
pattern = Pattern.compile(regex);
matcher = pattern.matcher(output);
while(matcher.find()) {
itemList.add(matcher.group(1));
}
只需填寫一些regex
。 建議?
您可以基於\\G
使用此正則表達式,在前一場比賽的末尾或首場比賽的字符串開頭聲明位置:
String regex = "(?:\\bprofiles\\s*\\{|(?<!^)\\G)[^{]+?(\\b\\w+\\b)\\s*\\{[^}]*}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(output);
List<String> itemList = new ArrayList<>();
while(matcher.find()) {
itemList.add(matcher.group(1));
}
([^\\\\s]+)\\\\s+\\\\{\\\\n\\\\s*context\\\\s
如果輸入確實如此簡單。 但是,很多事情都會出錯,例如,其中一個配置文件稱為“上下文”。
否則,解析它(作為JSON或編寫自己的解析器)可能比使用regex更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.