java - 正则表达式:匹配组(如果存在)否则忽略并继续其他匹配

标签 java regex regex-greedy

我一直在尝试匹配以下数据中的正则表达式模式:

字符串:

TestData to 1colon delimiter list has 1 rows.Set...value is: 1 Save Error: 267467374736437-TestInfo send Error

要匹配的单词:

  1. TestData
  2. 267467374736437-TestInfo

我正在使用的正则表达式模式:

(.+?\s)?.*(\s\d+-.*?\s)?

这里的场景是要匹配的字符串中可能不存在第二个匹配项 (267467374736437-TestInfo)。所以,我希望它是一个匹配(如果存在),否则继续其他匹配。因此我添加了零个或一个匹配量词?到上面的组模式。但随后它会忽略第二组。

如果我使用以下模式:

`(.+?\s)?.*(\s\d+-.*?\s)`

它匹配得很好,但如果匹配字符串中的字符串“267467374736437-TestInfo”则失败,因为它没有“?”量词。

请帮我理解哪里出了问题。

最佳答案

我宁愿不使用复杂的正则表达式,这会很丑陋并且是维护的噩梦。相反,一种简单的方法是分割字符串并获取第一个术语,然后使用智能正则表达式来精确定位第二个术语。

String input = "TestData to 1colon delimiter list has 1 rows.Set...value is: 1 Save Error: 267467374736437-TestInfo send Error";
String first = input.split(" ")[0];
String second = input.replaceAll(".*Save Error:\\s(.*)?\\s", "$1");

探索正则表达式:

Regex101

关于java - 正则表达式:匹配组(如果存在)否则忽略并继续其他匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37566995/

相关文章:

java - 为什么程序在我的 showPanel 方法中的 setVisible 处抛出错误 "cannot find symbol"?

java - 正则表达式不匹配

regex - 需要正则表达式来查找两个标记之间的子字符串

regex - 如何在这个给定的场景中应用惰性量词?

java - 当使用 GUI 时,我应该以不同的方式进行编译吗?

java - 创建包含所有自动化测试的可执行 .jar

java - EAP 7.3 JPA+Hibernate REST 双向 ManyToOne 关系序列化(非 SPRING)

php - 如何在不使用 strip_tags 的情况下从变量中删除 <div> 标签?

android - 使用正则表达式解析 iOS 6 表情符号

regex - 正则表达式 nongreedy 是贪婪的