Java 为什么';我的正则表达式不能找到我模式的所有实例
我试图找到这个字符串中出现的每一个“-”,所以我希望输出为2,而不是1 如果我搜索这个字符串“-.-.-.-.-.-.-”,我期望2,我得到2。因此,在我看来,当它们彼此相邻分组时,搜索无法识别单个“-”。我该如何解决这个问题Java 为什么';我的正则表达式不能找到我模式的所有实例,java,regex,Java,Regex,我试图找到这个字符串中出现的每一个“-”,所以我希望输出为2,而不是1 如果我搜索这个字符串“-.-.-.-.-.-.-”,我期望2,我得到2。因此,在我看来,当它们彼此相邻分组时,搜索无法识别单个“-”。我该如何解决这个问题 import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { public static void find() { int count =
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
public static void find() {
int count = 0;
Pattern p = Pattern.compile("\\.-\\.");
Matcher m = p.matcher("-.-.-.-");
while (m.find()) {
count++;
}
System.out.println(count);
}
public static void main(String[] args) {
find();
}
}
上述逻辑的解决方法如下:
String p = ".-.";
String s = "-.-.-.-";
int count = 0;
for (int index = s.indexOf(pa);
index >= 0;
index = s.indexOf(pa, index + 1)){
count++;
}
修正了Nick和bobble bubble提出的前瞻性
Pattern p = Pattern.compile("\\.-(?=\\.)");
试试看,它们不是紧挨着分组的,而是在第一个字符串中重叠。您可以通过使用前瞻来解决此问题:
\.-(?=\)