在JAVA程序中,我需要将文本输入与正则表达式模式进行匹配。简单来说,文本输入看起来像这样:"100|200|123,124,125"
。
上述匹配项的输出应找到三个匹配项,所有匹配项将返回两个固定的子组100
和200
以及变量重复子组123/124/125
。
第1场-123
比赛2-124
匹配3-125
。
这些匹配输出中的每一个还应在两个单独的组中包含100
和200
。
因此,基本上,匹配将针对诸如'100|200|123'
,'100|200|124'
,'100|200|125'
之类的提取模式。
我使用了此正则表达式:(?<=(?:(?<first>\d+)\|(?<second>\d+)\|)|,)(?<vardata>\d+)(?=,|$)
。
但我收到此错误:+ A quantifier inside a look-behind makes it non-fixed width
答案 0 :(得分:1)
如上面的注释所述,您不能在Java正则表达式的lookbehind中使用可变长度断言。
但是您可以基于\G
使用此正则表达式:
(?:(\d+)\|(\d+)\||(?<!^)\G,)(\d+)
RegEx详细信息:
\G
在上一场比赛的末尾或首场比赛的字符串开头声明位置。group(3)
中循环得到逗号分隔的数字,而group(1)
和group(2)
将从输入字符串中为您提供前2个数字。