正则表达式
符合一定规则的字符串
字符
例如:x a 9
\n:换行
\r:回车
":双引号
\:反斜杠(四个是\\)
字符类
[abc]:a或b或c
[^abc]:除了a或b或c的任意字符
[a-zA-Z]:a到z或者A-Z(两头字母包括)
[0-9]:0到9的字符的其中一个
预定义字符类
.:任何字符 转义字符:.
\d:数字: [0-9]
\w:单词字符 [a-zA-Z_0-9]
边界匹配器
^:行的开头
$:行的结尾
\b:某个单词的边界
string world?hello:空格和?是单词边界
数量词
?:0次或1次
*:0次或N次
+:1次或N次
{n}:匹配n次
{n,}:至少匹配n次
{n,m}:至少匹配n次,至多m次
例如:
邮箱:^\w+@\w{2,6}(\.\w{2,3})+$
Pattern
正则表达式的编译表示形式
方法
public static Pattern compile(String regex)
将给定的正则表达式编译到模式中
参数:regex - 要编译的表达式
抛出:PatternSyntaxException - 如果表达式的语法无效
public Matcher matcher(CharSequence input)
创建匹配给定输入与此模式的匹配器
参数:input - 要匹配的字符序列
返回:此模式的新匹配器
public boolean matches()
尝试将整个区域与模式匹配
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息
返回:当且仅当整个区域序列匹配此匹配器的模式时才返回 true
例如:
//定义Pattern对象
Pattern pattern = Pattern.compile("A*B");
Matcher matcher = pattern.matcher("AAAAAAAAAAAAAB");
System.out.println(matcher.matches());
public boolean find()查找想要匹配的子字符串
此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始
如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息
返回: 当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true
public int start()返回以前匹配的初始索引
指定者:接口 MatchResult 中的 start
返回:第一个匹配字符的索引
public String group()返回想要匹配的子字符串
对于具有输入序列 s 的匹配器 m,表达式 m.group() 和 s.substring(m.start(), m.end()) 是等效的
注意,某些模式(例如,a*)匹配空字符串。当模式成功匹配输入中的空字符串时,此方法将返回空字符串
指定者:接口 MatchResult 中的 group
返回:以前匹配操作所匹配的字符串形式的子序列(可能为空)
例如:
String string="My name is Daivd,what's your name?";
String regex="\\b\\w{4}\\b";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(string);
while(matcher.find()){
System.out.println(matcher.start());
System.out.println(matcher.end());
System.out.println(matcher.group());
System.out.println("--------------------");
}
public boolean lookingAt()从字符串的开始位置开始匹配
例如:
String string="My name is David, what's your name?";
String regex="\\b\\w{4}\\b";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(string);
System.out.println(matcher.lookingAt());
while (matcher.find()) {
System.out.println(matcher.start());
System.out.println(matcher.end());
System.out.println(matcher.group());
System.out.println("-------------------------");
}
String的matches方法和Pattern和Matcher的区别
两者各有优缺点
string的matches方法:
string.matches(string2);
此方法适合一次匹配,生命周期短,matches是将整个字符串进行匹配
Pattern和Matcher:
适合多次匹配,生命周期长,matches是将整个字符串进行匹配
可以许多匹配者共享一个模式,而且匹配能力强力
例如:
// 定义Pattern对象
Pattern pattern = Pattern.compile("A*B");
Matcher matcher = pattern.matcher("AAAAAAAAAAAAAB");
Matcher matcher1 = pattern.matcher("AAAAAB");
Matcher matcher2= pattern.matcher("AAAdddAAB");
System.out.println(matcher.matches());
System.out.println("================================");
String string = "AAAAAAAAAAAAAB";
String string2 = "A*B";
// matches方法的参数要确定是正则表达式
// boolean b = string2.matches(string);
boolean b = string.matches(string2);
System.out.println(b);
//两者各有优缺点:
/*string.matches(string2);
* 此方法适合一次匹配,生命周期短,matches是将整个字符串进行匹配
* */
/*Pattern和Matcher:
* 适合多次匹配,生命周期长,matches是将整个字符串进行匹配
* 可以许多匹配者共享一个模式,而且匹配能力强力
* */