Java通识基础23(正则表达式regular exprssion)
一种工具,绝大部分好的语言都应该支持正则表达式
正则表达式的理解性定义:
是一个“字符串模板”,可以代表一批字符串
功能表与特性
通配符:
每一个通配符都代表一个字符
.:代表任意一个字符\d:代表任意一个数字——digit\D:代表任意一个非数字\w:代表任意一个单词字符——word\W:代表任意一个非单词字符\s:代表任意一个空白\S:代表任意一个非空白字符——space范围通配符
[a-d]:代表a、b、c、d其中的任意一个字符枚举通配符
[adm]:代表a、d、m之中的任意一个字符范围和枚举共存的通配符
[am4-6]:代表a、m、4、5、6其中的任意一个字符求否字符
^[^am4-6]:代表不是a、m、4、5、6其中的任意一个字符[^a-d]:代表不是a、b、c、d其中的任意一个字符[^adm]:代表a、d、m不是之中的任意一个字符
求与字符
&&[a-g&&[^c-e]]:代表在a到g范围内又不是c-e的任意字符
出现频率运算符
?:代表前面的字符出现0-1次a?b:a只能出现0-1次,比如aab就不符合条件
*:前面的字符可以出现0-N次a*b:a只能出现0-N次,比如aaaaab、b\d*5:以5为结尾出现的任意一串数字
+:前面的字符可以出现1-N次a+b:a只能出现1-N次,比如aaaaab、单独的b不符合条件
{m,n}:前面的字符出现m到n次{m,}:前面的字符出现m到无限次{,n}:前面的字符出现0到n次{m}:前面的字符必须出现m次
成组
(abc){1,2}意义:小括号内是一个固定组合,不可以拆分
思考:((abc)|(123))*可否match abc1232123返回true
举例——身份证年份的正则表达式
\\{6}{{19\\d{2}}|{20[0,22]}};
Java对正则表达式的定义
引例
public class Demo1 {public static void main(String[] args) {System.out.println("233".matches("^\\d+5$"));//双斜杠的目的是用于转义System.out.println("233432425".matches("^\\d+5$"));}}/*falsetrue*/
程序写入正则表达式的时候需要
`^`作为开头`$`作为结尾
应用——正则表达式判断用户输入是否合法
import java.util.Scanner;public class Example {public static void main(String[] args) {Scanner ID=new Scanner(System.in);String you="^1{1,3}0{1,3}2$";while (ID.hasNextLine()){String id=ID.nextLine();if(id.matches(you)){System.out.println("vic");}else {System.out.println("Wrong");}; }}}/*102vic222Wrong*/
Java对正则表达式的支持
String类
matches(regex)方法:判断该字符串是否匹配正则表达式(上述例子已经展示)
split(regex)方法:根据指定分隔符将字符串分隔多段
replaceAll(regex,replacement):将regex替换成replacement(注意使用转义运算符)
