java - 在“111111111111111”中找到“11111”索引的正确正则表达式是什么?
问题描述
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
String in = "111111111111111";
Pattern p = Pattern.compile("(11111)");
Matcher m = p.matcher(in);
while (m.find()) {
System.out.print(m.start() + " ");
}
}
}
我得到的上述代码的输出是
0 5 10
我应该得到的输出是
0 1 2 3 4 5 6 7 8 9 10
有人可以告诉我我做错了什么吗?
解决方案
有人可以告诉我我做错了什么吗?
您假设您将从匹配中已使用的文本中获取匹配项。你不会的。
您可以使用前瞻性断言来做到这一点:
Pattern p = Pattern.compile("1(?=1111)");
(这意味着“找到一个在四个 1 之前的 1”,而不是“找到五个 1”)
但是使用以下方法更容易做到这一点indexOf
:
int prev = -1;
while ((prev = in.indexOf("11111", prev + 1)) != -1) {
System.out.println(prev + " ");
}
推荐阅读
- minikube - containerd-shim的父进程是什么进程?
- tensorflow - tf.print 不做任何事情,即使它是图表的一部分
- node.js - 如何验证字符串值是否为有效日期?
- python - 不要显示特定 x matplotlib 的 y 值
- linux - 如何将 TCP 套接字从一个容器迁移到同一主机中的另一个容器
- python - 如何将主成分分析的结果映射回输入模型的实际特征?
- javascript - 如何在我的 chrome 扩展程序中等待异步并调用 sendResponse?
- javascript - 为 ion-toast 组件和阴影部分的按钮应用不同的样式
- python - Psycopg2 和 sqlalchemy 都无法从本地 PostgreSQL 数据库中提取数据
- sql - 如何使用偏移量 date_trunc?