簡體   English   中英

使用正則表達式捕獲列表中的多個元素

[英]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_barbazqux ,而無需事先知道這些捕獲的值。 另外,我希望它具有靈活性,因為可以捕獲任意數量的項目。 它們將始終始終位於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.

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