正则表达式在字符串边界之外搜索

2024-04-20 07:50:31 发布

您现在位置:Python中文网/ 问答频道 /正文

代码如下:

import java.util.regex.*;

public class RegEx {

    public static void main(String[] args) {

        Pattern p = Pattern.compile("\\d*");
        Matcher m = p.matcher("ab56ef");
        System.out.println("Pattern is " + m.pattern());
        while (m.find()) {
            System.out.print("index: " + m.start() + " " + m.group());
        }
    }
}

结果是:

index: 0 index: 1 index: 2 56 index: 4 index: 5 index: 6

因为“ab34ef”的长度是6,所以字符串的最高索引是5。
为什么索引6有匹配项?提前谢谢!你知道吗


Tags: 代码importindexmainutilstaticjavapublic
1条回答
网友
1楼 · 发布于 2024-04-20 07:50:31

返回了6个索引,因为这里有6个匹配项,因为\d*可以匹配空字符串。在输入字符串的每个字符之前总是有一个空字符串,因为regex引擎在每个位置处理文本,寻找边界或特定字符。你知道吗

这里是visualization

enter image description here

在这里,引擎检查字符串的开头,并说:“我看不到数字,但我可以返回一个匹配,因为数字的数量可以是0”。它返回匹配的空字符串,并继续b。以此类推,直到字符串结束。你知道吗

如果需要查找所有数字,只需使用+量词和\d速记类。你知道吗

IDEONE demo

相关问题 更多 >