Java 如何使用正则表达式匹配文本中所有满意的字符串?

Java 如何使用正则表达式匹配文本中所有满意的字符串?,java,regex,Java,Regex,我使用像(J|N){1}N这样的模式来匹配像JNN这样的文本 使用此模式,我只能在文本中获得JN。但是,我希望同时获得JN和NN 我怎样才能得到满足模式的所有子字符串 如果文本类似于jnnn…是否有一种方便的方法来获取所有匹配的字符串?使用一个正向前瞻来捕获重叠的匹配 (?=([JN]N)) 例如: String s = "JNNNNJNN"; Pattern p = Pattern.compile("(?=([JN]N))"); Matcher m = p.matcher(s); whil

我使用像
(J|N){1}N
这样的模式来匹配像
JNN
这样的文本

使用此模式,我只能在文本中获得
JN
。但是,我希望同时获得
JN
NN

我怎样才能得到满足模式的所有子字符串


如果文本类似于
jnnn…
是否有一种方便的方法来获取所有匹配的字符串?

使用一个正向前瞻来捕获重叠的匹配

(?=([JN]N))
例如:

String s  = "JNNNNJNN";
Pattern p = Pattern.compile("(?=([JN]N))");
Matcher m = p.matcher(s);
while (m.find()) {
  System.out.println(m.group(1));
}
输出

JN
NN
NN
NN
JN
NN

查看此网站,它确实很方便:

对于JN和NN,您需要的是

/[J | N]N/g

这将确实与Jnnnnnnnnnn中的JN nnnn匹配

我希望这有帮助


为什么不
JN+
?。我很困惑,你想匹配什么?你的图案是什么?那将是最长的。但术语长度是固定的。模式是(J|N){1}N。可能相关:尝试用一个更好的例子来说明。