java - 请解释此正则表达式的输出(以正面前瞻开头)

标签 java regex

Pattern p = Pattern.compile("(?=[1-9][0-9]{2})[0-9]*[05]");
Matcher m = p.matcher("101");
while(m.find()){
    System.out.println(m.start()+":"+ m.end()+ m.group());
}

输出------>> 0:210

请告诉我为什么我在此处将 m.group() 的输出设为 10。 据我所知,m.group() 应该什么都不返回,因为 [05] 什么都不匹配。

最佳答案

您的模式 (?=[1-9][0-9]{2})[0-9]*[05] 由两部分组成:

(?=[1-9][0-9]{2})

[0-9]*[05]

第一部分是一个零宽度正前瞻,它搜索长度为 3 的数字,第一个不能为 0。这与您的 101 匹配。< br/> 第二部分搜索任意数量的数字,然后搜索 0 或 5。这与 101 的前 2 个字符匹配,因此结果为 10

参见 Java - Pattern获取更多信息。

关于java - 请解释此正则表达式的输出(以正面前瞻开头),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33804811/

相关文章:

java - Java API 与 Python 和 Cypher for Neo4J 的性能对比

sql - 删除编号重复超过 5 次的记录

python - 使用 TRE : strange unicode behavior 在 python 中近似 RegEx

java - 如何使用外部应用程序获取 Soap Web 服务的请求和响应详细信息?

python - 根据使用正则表达式获得的另一列上的匹配替换列上的值 (Python Pandas)

javascript - 防止 Javascript 中 SI 前缀的正则表达式回溯

c# - 使用正则表达式 C# 去除除 <b> 之外的 html 标签

java - 动态 Jar 加载让我很困惑

java - 构建一个可以在 OSGI 和非 OSGI 环境中工作的库的好方法是什么?

java - 如何将我的 MYSQL 表传输到 derby 数据库?