我试图了解java中正则表达式匹配的工作原理,并对以下代码片段有疑问
当我运行它时:http://ideone.com/2vIK77
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
String a = "Basic";
String b = "Bas*";
boolean matches = Pattern.matches(b, a);
System.out.println("1) "+matches);
String text2 =
"This is the text to be searched " +
"for occurrences of the pattern.";
String pattern2 = ".*is.*";
boolean matches2 = Pattern.matches(pattern2, text2);
System.out.println("matches2 = " + matches2);
}
}
它说 第一个为 false,第二个为 true。
1) false
matches2 = true
我无法理解为什么我在第一种情况下会出错..我希望它是真的。 有人可以给我建议吗
最佳答案
第一个模式:"Bas*"
,将匹配以 "Ba"
开头且由零个或多个 组成的任何字符串> 字符(
"Ba"
、"Bas"
、"Bass"
等)。这无法匹配“Basic”
,因为“Basic”不符合该模式。
第二个模式,“.*is.*”
,使用通配符字符.
,这意味着“匹配任何字符” 。它将匹配任何位置包含字符串 "is"
且前面和/或后面有零个或多个其他字符的文本。
docs for Pattern
详细描述了模式中可能出现的所有特殊元素。
关于java正则表达式有时无法匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18864075/