gpt4 book ai didi

Java 正则表达式 : Capture Multiple Matches on the same Line

转载 作者:行者123 更新时间:2023-12-02 15:27:39 24 4
gpt4 key购买 nike

我正在尝试创建一个正则表达式,该表达式将匹配同一行上的一个或多个变量值分配。我正在使用以下表达式:

([a-z][a-zA-Z0-9-]*)=(('(\'|[^\'])*')|("(\"|[^"])*"))

例如,如果我有以下字符串作为输入:

a="xyz" b="hello world"

并使用以下代码:

Matcher matcher = rules.get(regex).matcher(input);
int start = 0;

while (matcher.find(start)) {
System.err.println(matcher.group(0));

start = matcher.end();
}

它应该给我两个单独的结果:

1. a="xyz"
2. b="hello world"

但它只返回一个,即整个输入字符串。

a="xyz" b="hello world"

它似乎以xyz"b="hello world作为内部部分。我该如何解决这个问题?

最佳答案

您可以使用

(?s)([a-z][a-zA-Z0-9-]*)=(?:'([^\\']*(?:\\.[^\\']*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)")

请参阅regex demo

在 Java 中,

String regex = "(?s)([a-z][a-zA-Z0-9-]*)=(?:'([^\\\\']*(?:\\\\.[^\\\\']*)*)'|\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\")";

详细信息

  • (?s) - 内联 Pattern.DOTALL 嵌入标记选项,与 . 匹配,也匹配换行符
  • ([a-z][a-zA-Z0-9-]*) - 第 1 组
  • = - 等号
  • (?:'([^\\']*(?:\\.[^\\']*)*)'|"([^"\\]*(?:\\.[^"\\]*)*)") - 匹配以下两个选项之一的非捕获组:
    • '([^\\']*(?:\\.[^\\']*)*)' - ',然后任意数量\' 以外的字符,后跟任何转义序列的 0+ 次重复,后跟除 \'< 之外的 0+ 个字符
    • | - 或
    • "([^"\\]*(?:\\.[^"\\]*)*)" - ",然后任意数量\" 以外的字符,后跟任何转义序列的 0+ 次重复,后跟除 \"< 之外的 0+ 个字符 .

关于Java 正则表达式 : Capture Multiple Matches on the same Line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60535129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com