最简单的方法是使用两步解决方案:1)首先,验证字符串,然后2)用您选择的定界符分割字符串:
String[] chunks = null;if (s.matches("\d{2}(?:,\d{2})*")) { chunks = s.split(Pattern.quote(",")); System.out.println(Arrays.toString(chunks)); // => [12, 34, 98, 11]}在此,
s.matches("\d{2}(?:,\d{2})*")匹配以两位数字开头的整个字符串,然后匹配出现的0个或多个,和结尾的两位数字,然后
s.split(Pattern.quote(","))用逗号分割该字符串。注意你不需要^和
$美女主播与图案内
matches(),因为该方法需要一个完整的字符串匹配。
如果必须使用单个regex来执行此操作,则
只有在字符串开头的字符串检查成功的情况下,才可以在字符串的开头和每个成功的先前匹配的结尾处使用多个匹配项:
(?:G(?!^),|^(?=d{2}(?:,d{2})*$))(d{2})请参阅regex演示。
细节
(?:G(?!^),|^(?=d{2}(?:,d{2})*$))-前面成功匹配的结尾,然后是字符串()的,
(参见G(?!^),
)或(|
)开头,^
后跟两位数,然后是0或更多序列的a,
和两位数到字符串的末尾(参见d{2}(?:,d{2})*$)(d{2})-第1组:两位数
Java演示:
String s = "12,34,98,11";Pattern p = Pattern.compile("(?:\G(?!^),|^(?=\d{2}(?:,\d{2})*$))(\d{2})");Matcher m = p.matcher(s);List<String> results = new ArrayList<>();while(m.find()) { results.add(m.group(1));}System.out.println(results); // => [12, 34, 98, 11]


