使用正则表达式在列表中捕获 Headers
Capturing Headers in a List Using Regex
我试图从中捕获以下字符串(我们称之为 output
):
ltm pool TEST_POOL {
Some strings
above headers
records {
baz:1 {
ANY STRING
HERE
}
foobar:23 {
ALSO ANY
STRING HERE
}
}
members {
qux:45 {
ALSO ANY
STRINGS HERE
}
bash:2 {
AND ANY
STRING HERE
}
topaz:789 {
AND ANY
STRING HERE
}
}
Some strings
below headers
}
考虑 output
的每一行由一个典型的换行符分隔。为了这个问题,我们把records
和members
称为"titles"和baz
、foobar
、qux
、bash
,topaz
为 "headers"。我正在尝试在 Java 中制定一个正则表达式,它将捕获查找循环中给定标题括号之间的所有 headers。例如,假设我们要使用此代码查找标题 members
的所有 headers:
String regex = TODO; // members\s\{ contained in regex
final Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(output);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
输出应该是...
qux
bash
topaz
并且应该排除baz
和foobar
,因为它们包含在不同的"title"的括号内。可以有任意数量的标题和任意数量的 headers。如果您能帮助制定正则表达式来解决此问题,我们将不胜感激。
您可以使用此正则表达式 \G
断言位置在上一个匹配项的末尾或第一个匹配项的字符串的开头:
(?:\bmembers\s*\{|(?<!^)\G[^{]+\{[^}]+\})\s*?\n\s*([^:{}]+)(?=:\d)
或:
(?:\brecords\s*\{|(?<!^)\G[^{]+\{[^}]+\})\s*?\n\s*([^:{}]+)(?=:\d)
这是假设没有嵌套和转义 {
和 }
。
我试图从中捕获以下字符串(我们称之为 output
):
ltm pool TEST_POOL {
Some strings
above headers
records {
baz:1 {
ANY STRING
HERE
}
foobar:23 {
ALSO ANY
STRING HERE
}
}
members {
qux:45 {
ALSO ANY
STRINGS HERE
}
bash:2 {
AND ANY
STRING HERE
}
topaz:789 {
AND ANY
STRING HERE
}
}
Some strings
below headers
}
考虑 output
的每一行由一个典型的换行符分隔。为了这个问题,我们把records
和members
称为"titles"和baz
、foobar
、qux
、bash
,topaz
为 "headers"。我正在尝试在 Java 中制定一个正则表达式,它将捕获查找循环中给定标题括号之间的所有 headers。例如,假设我们要使用此代码查找标题 members
的所有 headers:
String regex = TODO; // members\s\{ contained in regex
final Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(output);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
输出应该是...
qux
bash
topaz
并且应该排除baz
和foobar
,因为它们包含在不同的"title"的括号内。可以有任意数量的标题和任意数量的 headers。如果您能帮助制定正则表达式来解决此问题,我们将不胜感激。
您可以使用此正则表达式 \G
断言位置在上一个匹配项的末尾或第一个匹配项的字符串的开头:
(?:\bmembers\s*\{|(?<!^)\G[^{]+\{[^}]+\})\s*?\n\s*([^:{}]+)(?=:\d)
或:
(?:\brecords\s*\{|(?<!^)\G[^{]+\{[^}]+\})\s*?\n\s*([^:{}]+)(?=:\d)
这是假设没有嵌套和转义 {
和 }
。