我对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
我想知道为什么会出现无法启动的异常。 (点)
非常感谢。
答案 0 :(得分:2)
该字符串中的*
之前没有前面的字符。如果在asterisks
之前没有前面的字符,那么你必须逃避它。
String regex = "\\*ing*";
^^
答案 1 :(得分:1)
在这个正则表达式的开头:
String regex = "*ing*"; //line 1
你要说*
之前根据需要多次重复这个角色...... 但是没有这样的角色,因为*
是第一个角色正则表达式。
在正则表达式中*
或+
之前必须有某种模式......否则就没有意义了。
答案 2 :(得分:1)
你的正则表达式.*ing*
表示的是,
从这里你可以看到.*
表示的内容。
.
表示任何字符