Java正则表达式匹配组为空,即使它匹配

时间:2015-08-04 12:03:02

标签: java regex

我们假设我得到了这一行:

|125148 Schalter f GLE GÜ 90/80Z nei PL 80 16AJ

想要匹配以下两个部分:

  • 125148
  • SLElter fGLEGÜ90/ 80Z nei PL 80

16AJ可以用作“断点”,所以从数字后面的第一个字母到“断点”的任何东西都应该在一个组中匹配。

我以某种方式使用此正则表达式^\|([0-9])+(.)+(?=\s+16AJ),但我的第一组包含8个字符,而我的第二组不包含任何内容。

请参阅此demo

我错过了什么?为什么我的第二组是空的?

3 个答案:

答案 0 :(得分:3)

^\|([0-9])+(.+)(?=\s+16AJ)

             ^^

你需要将量词内部带到捕获组。

答案 1 :(得分:1)

您可以使用此正则表达式:

^\|([0-9]+)\s+(.+?16AJ)

在Java中:

^\\|([0-9]+)\s+(.+?16AJ)

RegEx Demo

这会在第一组中为125148,在第二组中为Schalter f GLE GÜ 90/80Z nei PL 80 16AJ

答案 2 :(得分:1)

第二组不是空的。您在第一组中捕获8,在第二组中捕获0,这正是我对该正则表达式的期望。您需要将量词放在捕获组中。按照你的方式,你一次捕获一个角色,每次都覆盖以前捕获的角色。

我认为这是你正在尝试的:

^\|([0-9]+)\s+(.+?)\s+16AJ