java - 正则表达式组匹配返回错误值

标签 java regex

Regex=
 "^\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)(\\s+(\\S+(\\s+(\\S+))?))?(\\s+(\\S+))?\\s*";

input= "    1  ABC    DEF  GHI   JKL   PQR   ";

在上面的输入文本中,正则表达式匹配,但在某些情况下,JKL 可以是带有空格的单词,如“JKL MNO”,所以我将正则表达式视为可选的

(\\s+(\\S+))?

在获取组时我得到了错误的值,即

G1: 1 G2: ABC G3: DEF G4: GHI **G6: JKL PQR** G8:PQR

当 MNO 存在时,G6 应该只是 JKL 或 JKL MNO 作为一个词,请你弄清楚我做错了什么。

最佳答案

您观察到的行为是正则表达式的预期行为。捕获组以该组的左括号开始,以其结束括号结束。如果捕获组 A 包含捕获组 B,则 A 将包含所有 B。

那是为了

(\\s+(\\S+(\\s+(\\S+))?))?

匹配

   JKL PQR

第 1 组将是

   JKL PQR
第 2 组将是
JKL PQR
第 3 组将是
 PQR
第 4 组将是
PQR

如果您只想将 JKL 作为一个组,您可以结合使用捕获组和非捕获组,例如:

(?:\\s+(?:(\\S+)(?:\\s+(\\S+))?))?

那么组 1 将是 JKL,组 2 将是 PQR

关于java - 正则表达式组匹配返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28305701/

相关文章:

java - 传递给 CompletableFuture SupplyAsync Executors.newFixedThreadPool(10) 或 new ForkJoinPool(10) 哪个执行器更好

java - 为什么第二个 while 循环取消了两个 while 循环?

sql - 不区分大小写的搜索/查询

python - 正则表达式在同一字符串上返回不一致的结果

php - 我的正则表达式没有正确替换

php - 在带有转义的 php 中用逗号和等号分隔字符串

java - 如何让字体变大几秒后变小?

java - 将没有主要方法(带有外部 jar)的 Java 项目导出到 Eclipse 中的 Jar

java - 检查java数据库中是否存在值(Accountnumber)

python - 正则表达式,用于匹配单词后跟斜杠和10位数字