(1)正则表达式简介
- 作用:用于专门操作字符串。
- 特点:用一些特定的符号来表示一些代码操作,简化书写。
- 好处:可以简化对字符串的复杂操作。
- 弊端:符号定义越多,正则越长,阅读性越差。
正则表达式:定义了字符串的模式,是符合一定规则的表达式。 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
(2)具体操作功能
1.匹配 :String matches 方法
1.字符类
1.[abc]
校检一个位置上的字符∈[abc].只能是a或b或c
2.[^abc]
校验一个位置上字符不∈[abc].不是a或b或c (否定)
3.[a-zA-Z]
a-z或A-Z (范围)
4.[a-d[m-p]]
a-d或m-p (并集)
5.[a-z&&[def]]
d,e或f (交集)
6.[a-z&&[^bc]
a到z,除了b和c (减去)
7.[a-z&&[^m-p]]
a到z,除了m-p (减去)
@Test
public void test1(){
String str ="az";
String v ="[abcd][a-z]";
boolean ans = str.matches(v);
System.out.println(ans);
}
2.预定义字符类
1..
任何字符
2.\d
数字
3.\D
非数字
4.\s
空白字符
5.\S
非空白字符
6.\w
单词字符(数字字母下划线均可)
7.\W
非单词字符
String str ="a67";
String v ="[abcd].\\d";
boolean ans = str.matches(v);
System.out.println(ans);
3.数量词
1.X?
一次或一次也没有
2.X*
零次或多次
3.X+
一次或多次
4.X{n}
恰好n次
5.X{n,}
至少n次
6.X{n,m}
至少n次,但不超过m次
@Test//判断是否是电话号
public void checkTel()
{
String tel1 = "13721876401";
String v = "1[358]\\d{9}";
System.out.println(tel1.matches(v));
}
2.切割:String split 方法
1.切空格
@Test
public void test()
{
//切空格
String str = "zhangsan lisi wangwu";
String v = " +";//'+'代表一个或多个
String[] ans = str.split(v);
for(String s : ans){
System.out.println(s);
}
}
2.切叠词
@Test
public void test2(){
//切叠词
String str = "abccdeqqqqquizzos";
String v = "(.)\\1+";
String[] ans = str.split(v);
for(String s : ans){
System.out.println(s);
}
}
3.组合捕获
在上面切叠词中,为了让规则的结果被重用。可以将规则封装成一个组.用()完成,组的出现都有编号。从1开始,想要使用已有的组可以通过\n
(n就是组的编号)的形式来获取.
捕获组可以通过从左到有计算左括号.如((A)(B(C)))
有四组
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)
3.替换:replaceAll方法
将字符串中n个数替换成"#".
将重叠的字符替换成单个字符.zzzz–>z
package Regular正则表达式;
import org.junit.Test;
public class Replace替换 {
public static void main(String[] args) {
// 将字符串中n个数替换成"#".
String str = "abc123444acd4545aa9";
myreplace(str, "\\d{1,}", "#");
String str2 = "aaqwebb1123ccc";
// 将重叠的字符替换成单个字符.zzzz-->z
myreplace(str2, "(.)\\1+", "$1");
}
private static void myreplace(String str, String olds, String news) {
str = str.replaceAll(olds, news);
System.out.println(str);
}
}
4.获取 (封装–>匹配–>关联–>获取)
操作步骤:
- 1.将正则表达式封装成对象。
- 2.让正则对象和要操作的字符串相匹配。
- 3.关联后,获取正则匹配引擎。
- 4.通过引擎对符合规则的子串进行操作。
获取三个字母组成的单词:
package Regular正则表达式;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class 获取 {
public static void main(String[] args) {
String str = "qiao bi luo dian xia ,cxk .";
String v = "\\b[a-z]{3}\\b";
// 1.将正则封装成对象
Pattern p = Pattern.compile(v);
// 2.让正则对象和要作用的字符串相关联,获取匹配器对象
Matcher m = p.matcher(str);
// 其实String类中的matches方法,就是用Pattern和Matcher对象完成的
// 只不过被String的方法封装后,用起来较为简单,但是功能单一.
// System.out.println(m.matches());
// boolean b = m.find();// 将规则作用到字符串上,并进行符合规则的子串查找.
// System.out.println(b);
// System.out.println(m.group());
// 3.先find再group
while (m.find()) {
System.out.println(m.group());
System.out.println(m.start() + "...." + m.end());// 获取子串索引位置
}
}
}