Java正则表达式点

时间:2014-03-22 06:52:16

标签: java regex

我对java模式匹配和正则表达式感到困惑。 我的理解是正则表达式

" *"用于匹配前面的字符任意次数

""任何角色

    String regex = ".ing*";  //line 1
    Pattern pattern = Pattern.compile(regex);
    String [] tests = {"ing", "ring", "trying", "running", "beings"};
    for(String test: tests) 
    {
        Matcher m = pattern.matcher(test);
        if(m.matches()) 
        {
            System.out.println(test + " matches " + regex);
        }
    }

在上面的程序中,输出是" ring匹配.ing"。我明白了,但是当我改为第1行时,

            String regex = "*ing*";  //line 1      Exception occur

            String regex = ".*ing*";  //line 1      OK

我想知道为什么会出现无法启动的异常。 (点)

非常感谢。

3 个答案:

答案 0 :(得分:2)

该字符串中的*之前没有前面的字符。如果在asterisks之前没有前面的字符,那么你必须逃避它。

String regex = "\\*ing*";
                ^^

答案 1 :(得分:1)

在这个正则表达式的开头:

  String regex = "*ing*";  //line 1

你要说*之前根据需要多次重复这个角色...... 但是没有这样的角色,因为*是第一个角色正则表达式。

在正则表达式中*+之前必须有某种模式......否则就没有意义了。

答案 2 :(得分:1)

你的正则表达式.*ing*表示的是,

enter image description here

从这里你可以看到.*表示的内容。 .表示任何字符