代码学习--常用的正则表达式

学习内容

        工作代码中遇到了正则表达式,用于匹配输入的指令格式是否梳理一下,一边学习。

例子1    pid输入格式匹配

指令格式
pid是没有包含字母和中文的字符串,比如:pid=12345

正则表达式

Pattern pattern = Pattern.compile("^\\S+[a-z A-Z]|[\u4e00-\u9fa5]$");
Matcher matcher = pattern.matcher(pid);
if(!matcher.find()) {  //PID中没有字母,中文

 这里的pid,是String pid;
^    匹配输入字符串开始的位置
\S  匹配任何非空白字符。
\s     匹配任何空白字符,包括空格、制表符、换页符等等
+      匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
*       匹配前面的子表达式零次或多次,如a*b匹配aaaaaab,返回true
[a-z A-Z] 匹配字母
[\u4e00-\u9fa5] 匹配中文
[0-9] 匹配数字

注意:Pattern和Matcher
Pattern类用于创建一个正则表达式,也可以说是匹配一个正则表达式(如上),由于类的构造器是私有的,不可直接创建,所以通过简单工厂方法

Pattern pattern  = Pattern.commpile(String regex); //创建一个正则表达式

Matcher类用于匹配正则表达式,Matcher类构造器也是私有的,不可直接创捷,所以通过调用

Matcher matcher = Pattern.compile(String input);  //匹配正则表达式

常用:matcher.find()返回一个boolean判断数据是否匹配。

 

例子2     sd指令输入格式匹配


指令格式
sd:1/y/1
正则表达式(只匹配冒号后面的字符)
[0-9]{1,2}/[a-zA-z]{1}/[0-9]{1,2}
[0-9]{1,2}/[a-zA-z]{1}/[0-9]{1,2}
{n}:匹配确定的n次
{n,}:匹配至少n次
{n,m}:匹配至少n次,最多2次
上面两个正则表达式匹配实例
12/y/12或者1/y/1等
12y12或者1y1等

例子3   匹配CG指令格式

指令格式:
CG:3U8884/12JUN128/CTU
正则表达式(只匹配了冒号后面的字符):
".{5,6}/.{1,}/[a-zA-Z]{3}"
.:表示匹配任意一个字符

例子4   匹配航班号指令格式

航班格式:CA1234,3U8888等

正则表达式:由于要匹配字母或者数字,分为两部分来匹配

[a-z A-z 0-9]{2,}[0-9]{4,}

例子5

指令 : 3U8888/29JUN18YPEK-10;20

表达式  : [a-z A-Z 0-9]{5,7}/[a-zA-Z0-9]{10,12}-[0-9]{1,}([;][0-9]{1,})?$

指令:3U8888/29JUN18YPEK-10;20;30;20;1....

表达式:^[a-z A-Z 0-9]{5,7}/[a-zA-Z0-9]{10,12}-[0-9]{1,}([;][0-9]{1,})+$

?:匹配前面的子表达式零次或一次.

+:匹配前面的子表达式一次或者多次

从上面的表达式我们可以看到:([;][0-9]{1,})? 表示 ()里面得表达式匹配0或者1次;+就可以匹配无限多了

例子6 匹配hbpw格式

cmd =HBPW:"3U8888/31JUL18FPEK1,BLND,DEAF,PSM,UM,INF,WCHR,WCBD,SPML";

regex=".{5,}/[^/]{1,}[,]{1,}[0-9a-zA-Z\u4e00-\u9fa5]{1,}"

[^/] 表示匹配非/的字符

后面的就没有分割指令了,都是批量匹配

猜你喜欢

转载自blog.csdn.net/stonennnn/article/details/80660973