正则表达式
正则表达式:符合一定规则的表达式:regex
作用:用于专门操作字符串
特点:用一些特定的符合来表示一些代码操作,这样就简化书写。
所以学习正则表达式,就是学习对一些特殊符号的使用
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正则越长,阅读性越差。
具体操作:
在java.lang.String中(String类中)
1.匹配:
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式,返回布尔型的值。
用规则匹配整个字符串,只要一处匹配
规则:
字符类:
[abc]:这个字符串中的第一个字符只能是abc中的一个,而且这个字符串只能是一个字符。
[^abc]:任何字符,除了abc
[abc][a-z]:第一个字符是abc中的一个,第二个字符是a-z任意一个字符
[a-zA-Z]:a-z或A-Z中的字符
预定义字符类:
.:任意字符
\d:数字[0-9]
\D:非数字[^0-9]
\w:单词字符[a-zA-Z_0-9]
\W:非单词字符[^\w]
在java中,字符串中出现\,会将后面的字符转义字符,
在正则表达式中,\d是一个整体,要把这个\转义成普通的\,再和后面的字符组合。
所以在正则表达式中,\是一对一对出现的。\\d
Greedy数量词:
X? : X 出现一次或一次没有
X* : 零次或多次
X+ : 一次或多次
X{n} : 恰好n次
X{n,} : 至少n次
X{n,m} : 至少n次,不超过m次
边界匹配器:
找3个字母组成的单词:regex="\\b[a-z]{3}\\b";
\b:单词边界;\B非单词边界
**2.切割:**String类中的split
String split(String regex):
多个空格切:" +"
按.切:"\\.":
因为.是正则表达式的特殊符号,所以要转义。
正则表达式中.是用\.表示,所以要转义\\.
按\\切:"\\\\"
按叠词切:!!!!
按叠词切:"(.)\\1+" :两个或两个以上相同的字符叠词所以用+
第一位是任意字符,第二位拿第一位的值。
为了让规则的结果被重用,可将要重用的部分封装成一个组,用()表示。
组封装完后,会有自动编号,从1开始。
想要使用已有的组,可通过\n(n就是组的编号)的形式来获取。
两个或两个以上相同的字符叠词所以用+
复杂表达式:((A)(B(C)))共有4个组
1-((A)(B(C)))
2-(A)
3-(B(C))
4-(C)
**3.替换:**String类中的replaceAll()
String replaceAll(String regex,String replacement)
String replaceAll(String str,String regex,String replacement)
4.获取:将符合规则的字符串取出。
操作步骤:
1.将正则表达式封装成对象1.Pattern p=Pattern.compile(regex);
2.让正则对象和要操作的字符串相关联 2.3. Matcher m=p.matcher(str);
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出。4. m.group()
Pattern类:正则表达式的编译表达形式
Pattern类在java.util.regex.Pattern;
Pattern:不能new对象。
方法:
static Pattern compile(String regex):将给定的表达式编译到模式中。
Matcher matcher(CharSquence input):创建匹配给定输入与此模式的匹配器。
static boolean matcher(String regex,CharSquence input):
编译指定正则表达式并尝试将给定输入与其匹配。
Matcher类(对象):java.util.regex.Matcher;
Matcher类(对象):通过解释Pattern对character sequence执行匹配操作的引擎。
CharSequence:java.lang.*;
字符区的接口,有个子类String。
Matcher类(对象)中的功能:此模式新匹配器
boolean matches():将整个区域与模式匹配,同String类的matches方法。
其实String类中的matches方法,用的就是Pattern和Matcher对象来完成的,
只不过被String的方法封装后,用起来较为简单,但是功能却单一。
String group():返回由以前匹配操作所匹配的输入子序列。
m.group():用于获取匹配后结果
boolean find():尝试查找与该模式匹配的输入序列的下一个子序列。
boolean b=m.find():将规则作用到字符串上并进行符合规则的子串查找。
int start():
m.start():子串的索引的开头角标
int end():
m.end():子串的索引的结尾角标
找3个字母组成的单词:regex="\\b[a-z]{3}\\b";
\b:单词边界;\B非单词边界