正则表达式查找方法

时间:2017-04-05 08:13:57

标签: java regex

这是我在给定字符串中查找"ab"模式的代码。

import java.util.regex.*;
public class RegExp
{
    public static void main(String[] args)
    {
        Pattern p = Pattern.compile("ab");
        Matcher m = p.matcher("ababbaba");
        while(m.find())
        {
            System.out.println(m.start());
        }
    }
}

但我无法理解find()start()的内部工作情况。

3 个答案:

答案 0 :(得分:4)

find方法扫描输入序列,查找与模式匹配的下一个子序列,并返回表示失败成功的boolean

内部find方法调用search方法(访问控制默认值),以便启动搜索以在给定范围内查找Pattern。在每次比赛时,界限将增加,直到找到所有比赛。

Matcher类后面,它是一个状态机,它将保持匹配状态。

另一方面,start方法将起始索引作为最新匹配捕获的子序列的int返回。

如果您想要更深入,我建议您查看Matcher课程的source code

答案 1 :(得分:2)

您可以阅读in the documentation of find()

  

尝试找到输入序列的下一个子序列   匹配模式。

     

此方法从此匹配器区域的开头开始,或者,如果是   以前的方法调用是成功的,匹配器有   从没有重置,在第一个字符不匹配   上一场比赛。

     

如果匹配成功,则可以通过获得更多信息   开始,结束和分组方法。

因此,当您第一次致电matcher(String text) 没有任何反应时。只有当您致电find()时,它才会找到第一个匹配。如果您第二次致电find(),它的目标是找到下一场比赛,依此类推。

以下序列图描述了会发生什么:

sequence diagram of the code

构造匹配器,每次调用find()时,“光标”移动到下一个匹配。

答案 2 :(得分:0)

更新:

  1. find()尝试查找与模式匹配的子字符串。
  2. start()返回子字符串匹配的位置。
  3. 如果整个字符串与给定的模式匹配,则
  4. matches返回true。