Java 6正则表达式一组的多个匹配

2024-02-09

这是简单的模式:[key]: [value1] [value2] [value3] [valueN]

我想得到:

  1. key
  2. 值数组

这是我的正则表达式:^([^:]+):(:? ([^ ]+))++$

这是我的文字:foo: a b c d

Matcher给了我 2 组:foo(作为键)和d(作为值)。

如果我使用+?代替++ I get a, not d.

所以java返回我第一次(或最后一次)出现的组。

我不能使用find()这里因为只有one match.

除了将正则表达式分成两部分并使用 find 来查找值数组之外,我还能做什么? 我在许多其他环境中使用过正则表达式,几乎所有环境都能够获取“第 1 组的第一次出现”、“第 1 组的第二次出现”等。

我该怎么做java.util.regex在 JDK6 中?

Thanks.


匹配组的总数不依赖于目标字符串("foo: a b c d",在你的情况下),但在模式上。您的模式将始终有 3 组:

^([^:]+):(:? ([^ ]+))++$
 ^       ^   ^
 |       |   |
 1       2   3

The 1st group will hold your key, and the 2nd group, which matches the same as group 3 but then includes a white space, will always hold just 1 of your values. This is either the first values (in case of the ungreedy +?) or the last value (in case of greedy matching).

你能做的就是匹配:

^([^:]+):\s*(.*)$

这样你就有了以下匹配项:

- group(1) = "foo"
- group(2) = "a b c d"

and then split the 2nd group on it's white spaces to get all values:

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  public static void main (String[] args) throws Exception {
    Matcher m = Pattern.compile("^([^:]+):\\s*(.*)$").matcher("foo: a b c d");
    if(m.find()) {
      String key = m.group(1);
      String[] values = m.group(2).split("\\s+");
      System.out.printf("key=%s, values=%s", key, Arrays.toString(values));
    }
  }
}

这将打印:

key=foo, values=[a, b, c, d]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 6正则表达式一组的多个匹配 的相关文章

随机推荐

  • 我应该更新我的 npm 版本还是使用 node.js 提供的版本?

    我有一个使用 node js 14 16 0 的项目 我和我的团队成员都使用该版本 我使用 npm 6 14 11 我的团队成员使用 npm 7 x x 这会导致 package lock json 不同 这lockFileVersion我
  • 为什么我的 xcode 构建总是转到 iPad 模拟器而不是 iPhone 模拟器?

    我刚刚安装了 Apple 的最新 SDK 因此我可以开始学习 iPhone iPad 应用程序开发 然而 我遇到了一个愚蠢的问题 我的所有构建都在 iPad 模拟器而不是 iPhone 模拟器中运行 而且我不知道如何更改它 目前 iPhon
  • Excel 中用于 CSV 导入的相对路径

    我有一个 Excel 工作簿 可以自动更新 CSV 文件中的工作表 这些从硬编码文件夹 c temp premiumreports name of CSV file csv 中提取数据 此方法迫使我每次都将所有内容放入 c temp pre
  • 来自 ngFor angular2 的拼接元素

    我正在从后端请求位置列表并将其用于ngFor但是我想删除第一个数组元素 说我要删除Id 0所以在我看来不会这样li元素 这是我正在渲染并想要删除的列表数组StoreHouse Id 0 StoreLocation StoreHouse Id
  • ckeditor 不读取媒体嵌入代码

    我使用 ckeditor 的媒体嵌入插件 它工作正常 代码正确保存在数据库和 youtube soundcloud 等中 页面上播放器显示正常 但是 当用户进入他可以编辑信息的管理页面时 内部和带有标签的文本不会显示 因此当用户单击 保存
  • 指向零长度数组的指针的属性

    Consider int main auto a new int 0 delete a So there s no memory leak 在复制初始化和删除之间 是否允许读取指针a 1 此外 该语言是否允许编译器设置a to nullpt
  • 如何在 Azure API 管理中导入 swagger

    我看到一些文章和视频 其中导入了 Swagger 但随着新的 UI 更改 我无法找到导入 Swagger 的位置 在视频参考中 它显示在 WADL 或 Swagger 选项中 现在我看不到 Swagger 选项 这个选项被删除了吗 您可以使
  • 通过 MSBuild 构建 Visual Studio 2015 C++ 项目 (v140) 失败 - 找不到 v140

    我并排安装了 Visual Studio 2013 和 2015 我刚刚将组合解决方案 C C C CLI 升级到 2015 并将 Platform Toolset 设置为 v140 Visual Studio 中的构建工作正常 但无法从
  • 查询 XML 而忽略名称空间?

    我试图在忽略命名空间的同时查询 XML 因为结果集有多个命名空间 我已经到达 DataSets 节点 但我不知道如何获取多个 DataSourceName CommandType CommandText 理想情况下我想要 DataSetNa
  • 通过OData读取数据:如何通过curl/RCurl指定身份验证方案?

    我想通过 HTTPS 读取一些数据OData http www odata org 连接和数据源需要Basic认证方案 我很熟悉平常的curl http curl haxx se RCurl http cran r project org
  • 无法使用项目列表(数组)读取自定义事实

    我创建了自定义事实 gt etc ansible facts d hdfs fact 当我使用以下命令运行剧本时 debug var ansible local hdfs run once true 我如预期得到以下答案 PLAY all
  • 管理 Google 地图 API 密钥

    我的应用程序使用大量 MapView 屏幕 我正在尝试找出如何管理调试环境和生产环境之间的 API 密钥 显然 无法更改 Eclipse 中的调试应用程序密钥 因此我必须在该环境中使用调试映射 API 密钥 相反 如果没有生产应用程序密钥
  • AS3 处理任意大文件

    我正在尝试读取 AS3 中的一个非常大的文件 但我遇到了运行时崩溃的问题 我目前正在使用文件流 http help adobe com en US Flex 4 0 langref flash filesystem FileStream h
  • NHibernate.LazyInitializationException

    我们一直偶尔会出现这个问题 但现在我每次都可以重现它 我正在增加自定义论坛上的查看计数器 这会导致错误 NHibernate LazyInitializationException 未能延迟初始化集合 没有会话或会话被关闭 此错误发生在对象
  • 从 virtualenv 中启动 wsgi 应用程序作为 Linux 系统服务

    我目前正在 virtualenv 中开发一个 Bottle 应用程序 我打算使用 bjoern WSGI 服务器来提供它 但这可能并不重要 我还打算使用 lighty 或 nginx 反向代理来为应用程序提供服务 无论如何 应用程序可以作为
  • ECS任务如何知道在哪个区域运行?

    我有一个在 ECS 启动的任务中使用 boto3 的 python 应用程序 在 docker 容器中 我使用的 boto3 命令需要一个区域才能正常工作 但我只知道运行时的区域 多区域应用程序 当时的想法是定义AWS DEFAULT RE
  • 在 if 条件下改变字符串变量

    我使用这个程序将输入 mm 作为一年中的月份并打印出月份的名称 include
  • 如何根据 UIAlertController 中的 UITextField 禁用 UIAlertAction?

    我正在使用一个UIAlertController向用户呈现一个对话框以输入5 位 CRN 我想要Add按钮将被禁用 直到字段中有五位且仅有五位数字 UITextField 用户界面如下所示 以下是为以下内容设置的属性UIAlertContr
  • 如何从 docker 镜像中删除 ENV 设置

    我有一个设置 HOME 和 PATH 的 docker 映像 config HOME 我知道我可以替换它 但是是否可以删除它 并使用正常的 bash 配置文件设置 我不想通过破解 shell 配置文件来覆盖它 我无法让 creack 的答案
  • Java 6正则表达式一组的多个匹配

    这是简单的模式 key value1 value2 value3 valueN 我想得到 key 值数组 这是我的正则表达式 这是我的文字 foo a b c d Matcher给了我 2 组 foo 作为键 和d 作为值 如果我使用 代替