正则表达式:
A:字符
x 代表字符x。如 a 标识'a'
\\ 反斜杠字符
\n 换行符('\u000A')
\r 回车符('\u000D')
B:字符类
[abc] 代表有a 或 b 或 c 有且只有一个字符
[^abc] a b c都不是
[a-zA-Z] 所有字母中的一个(有一个闭区间范围内的值)
[0-9] 0到9之间的一个字符
C:预定义子父类
. 任意字符
\d 数字字符
\D 非数字字符
\s 空白字符[\t\n\r\x0B]
\S 非空白字符[^\s]
\w 单词字符[a-zA-Z_0-9](下划线也属于单词字符)
\W 非单词字符
D:边界匹配器
^ 开头
$ 行为
\b 单词边界 (不是单词字符的地方)
E:数量词
X? 至多一次
X* 零次或者多次
X+ 至少一次
X{n} 刚好n次
X{n,} 至少n次
X{n,m} n到m次,闭区间
正则表达式常见例子
判断: boolean matches(String regex)
regex 为正则表达式字符串
分割: String[] split(String regex)
替换: String replaceAll(String regex,String replacement)
——————————————————————————————————————————————————————————————————————————————————————————————————————
package demo;
import java.util.Scanner;
public class demo1 {
public static void main(String[] args) {
// System.out.println(judgeCellnumber());
System.out.println(emailCheck());
}
//实例:判断输入字符是否是一个手机号(11位数字,1开头)
public static boolean judgeCellnumber() {
boolean flag = false;
System.out.println("请输入手机号:");
String cellNum = new Scanner(System.in).next();//获取输入的字符串
String regex = "[1][3578][0-9]{9}";//手机号的正则表达式
// String regex = "[1]\\d{10}";
flag = cellNum.matches(regex);//匹配判断
return flag;
}
public static boolean emailCheck(){
boolean flag = false;
System.out.println("请输入邮箱:");
String cellNum = new Scanner(System.in).next();//获取输入的字符串
String regex = "(\\w)+@\\w{2,6}(\\.\\w{2,3})+";//正则表达式
// String regex = "[1]\\d{10}";
flag = cellNum.matches(regex);//匹配判断
return flag;
}
//判断邮箱功能
}
——————————————————————————————————————————————————————————————————————————————————————————————————
//获取字符串中只有3个字母的单词
package demo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test2 {
public static void main(String[] args) {
String str = "wo shi huang yha ning,ni hao la,haha hah";
//正则表达式原始
String regex = "\\b\\w{3}\\b";
//将正则表达式编译到模式中
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);//模式的匹配过滤器
// boolean b = m.matches();
// System.out.println(b);
System.out.println(p.pattern());//返回此编译模式的正则表达式
// System.out.println("find匹配的字符:"+m.find());
// System.out.println(m.group());
//
// System.out.println("find匹配的字符:"+m.find());
// System.out.println(m.group());
boolean b = false;
while(b=m.find()){
System.out.println("find匹配的结果:"+b);
System.out.println(m.start());//返回前一个find的匹配的初始索引
System.out.println(m.end());//返回最后匹配字符之后的偏移量
System.out.println("偏移量截到的字符串:"+str.subSequence(m.start(), m.end()));
System.out.println("group获取的字符串:"+m.group());
}
}
}
输出结果
\b\w{3}\b
find匹配的结果:true
3
6
偏移量截到的字符串:shi
group获取的字符串:shi
find匹配的结果:true
13
16
偏移量截到的字符串:yha
group获取的字符串:yha
find匹配的结果:true
25
28
偏移量截到的字符串:hao
group获取的字符串:hao
find匹配的结果:true
37
40
偏移量截到的字符串:hah
group获取的字符串:hah
————————————————————————————————————————————————————————————————————————————————————————————————————————————
//我我我......我爱爱爱...爱学..学.....编编程.....
//转为 我爱学编程
public class Test11 {
public static void main(String[] args) {
String str = "我我我......我爱爱爱...爱学..学.....编编程.....";
//将.替换成空字符
str = str.replaceAll("\\.", "");
System.out.println(str);
//去除叠词
str = str.replaceAll("(.)\\1+","$1");
System.out.println(str);
str = "abcabcaaabcaaaabbccabc";
str = str.replaceAll("(abc(aa))\\1", "*");
System.out.println(str);
}
}
输出结果:
我我我我爱爱爱爱学学编编程
我爱学编程
abc*aabbccabc