JavaEE-14-正则表达式
概述:
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。
正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。
如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。
和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂
学习入门:
学习正则表达式最好的方法就是通过示例学习,下面举一个简单的例子:
-
^ 为匹配输入字符串的开始位置。
-
[0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。
-
abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。
再看一下例子:只允许用户名包含字符、数字、下划线和连接字符(-),并设置用户名的长度
A:字符
x 字符x。(举例:'a'表示字符a)
\\ 反斜杠字符。
\n 换行符
\r 回车符
B:字符类
[abc] a、b、c字符
[^abc] 除了a、b、c外的任何字符
[a-zA-Z] 任意大小写字母
[0-9] 任意数字
C:预定义字符类
. 任何字符
\d 数字字符 [0-9]
\w 单词字符 [a-zA-Z_0-9]
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
E:数量词
X? 一次或一次也没有
X* 零次或多次
X+ 一次或多次
X{n} n次
X{n,} 至少n次
X{n,m} 至少n次,但不超过m次
正则表达式的应用:
1.判断功能:
public boolean matches(String regex)
先建立一个规则regex,再使用matches方法调用该方法,判断其是否满足该规则。
常见使用场景:手机号码、邮箱地址、密码等的格式验证。
2.分割功能:
public String[] split(String regex)
先确定分割符号并建立相应的规则regex,再调用split方法,对字符串进行分割。
常见使用场景:以- , . \等符号或者空格间隔的字符串,将其分割后以字符数组的形式表示。
举例:
1 public class RegexTest { 2 public static void main(String[] args) { 3 String s = "91 27 46 38 50"; 4 String[] strArray = s.split(" ");//将字符串分割为字符数组 5 int[] arr = new int[strArray.length];//定义整型数组 6 for (int x = 0; x < arr.length; x++) {//将字符数组元素转成int 7 arr[x] = Integer.parseInt(strArray[x]); 8 } 9 Arrays.sort(arr);//对数组进行排序 10 //使用字符串缓冲将数组重新转换成字符串 11 StringBuilder sb = new StringBuilder(); 12 for (int x = 0; x < arr.length; x++) { 13 sb.append(arr[x]).append(" "); 14 } 15 String result = sb.toString().trim(); 16 System.out.println(result); 17 } 18 }
3.替换功能:
public String replaceAll(String regex,String replacement)
将需要被替换的内容建立一下规则regex,再将新的内容建立成一个字符串,再调用replaceAll方法,替换旧的内容。
常见使用场景:论坛上常用的文字屏蔽功能,替换成文明用语。
举例:
1 public class RegexDemo { 2 public static void main(String[] args) { 3 String s = "helloqq12345worldkh622424321314java"; 4 String regex = ".+"; 5 String ss = "文明用语"; 6 7 String result = s.replaceAll(regex, ss); 8 System.out.println(result); 9 } 10 }
4.获取功能:
Pattern和Matcher类的使用
先把规则regex编译成模式对象,再通过模式对象得到匹配器对象,最后通过匹配对象的find方法查找。