文档章节

正则表达式

Simon丶Ma
 Simon丶Ma
发布于 2016/04/14 14:31
字数 1078
阅读 9
收藏 0

1.正则表达式

正则表达式,又称正规表示法、常规表示法(Regular Expression,常简写为regex、regexp或RE)。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串

2.元字符:

元字符 正则表达式的写法 意义
. “.” 任意一个字符
^ “^Spring” 以Spring开始的字符
$ “EEEE$” 匹配行结束符,以”EEEE”结束的字符
\d “\d” 0-9的任何一个数字
\D “\D” 任何一个非数字字符
\s “\s” 空白字符,如”\t”,”\n”
\S “\S” 非空白字符
\w “\w” 可用作标识符的字符,但不包括“$”
\W “\W” 不可用作标识符的字符
\p{Lower} \p{Lower} 小定字母a-z
\p{Upper} \p{Upper} 大写字母A-Z
\p{ASCII} \p{ASCII} ASCII字符
\p{Alpha} \p{Alpha} 字母字符
\p{Digit} \p{Digit} 十进制数字,0-9
\p{Alnum} \p{Alnum} 数字或字母字符
\p{Punct} \p{Punct} 标点符号:!“#%&()*=-
\p{Graph} \p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} \p{Print} 可打印字符[\p{Graph}\x20]
\p{Blank} \p{Blank} 空格或制表符:[\t]
\p{Cntrl} \p{Cntrl} 控制字符:[\x00-\x1F\x7F]

3.方括号

方括号括起来若干个字符来表示一个元字符,该元字符可代表方括号中的任何一个字符。
reg=“[abc]4”—– 则”a4”,”b4”,”c4”,都是和此正则表达式匹配的字符串

方括号例子 意义
[^456] 代表4,5,6之外的任何字符
[a-r] 代表a~r中的任何一个字母
[a-Za-Z] 代表任意一个英文字母
[a-e[g-z]] 代表a~e或g~z中的任意一个字母
[a-o&&[def]] 代表字母d,e,f(交运算)
[a-o&&[^bc]] 代表字母a,d(差运算)

4.()–小括号

将 () 之间括起来的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。

5.限定修饰符

使用限定修饰符来限定元字符出现的次数

限定修饰符 意义 示例
? 0次或1次 A?
* 0次或多次 A*
+ 1次或多次 A+
{n} 正好出现n次 A{2}
{n,} 至少出现n次 A{2,}
{n,m} 出现n到m次 A{2,6}

6.样例

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class Regular {   
 
//字符串是否是数字  
 
public static String regexIsDigital = “\d+”;  
 
//字符串是否是字母  
 
public static String regexIsAlpha =”\p{Alpha}+”;  
 
//字符串是否是15位或18位的身体证号码  
 
public static String regexIsID=”\d{15}|\d{18}”;  
 
//字符串是否是JJJ开头KKK结尾  
 
public static String regexIsJJJStartKKKEnd=”^JJJ.*KKK$”;  
 
//字符串是否是区号是3或4位数字-(可有可没有)号码任意多少位的数字  
 
public static String regexIsTelePhoneNumber =”[0-9]{3,4}\-?[0-9]+”;  
 
//X@X.com.cn  
 
public static String regexIsEmail = “\w+@\w+(\.\w{2,3})*\.\w{2,3}”;  
 
//字符串是否是汉字  
 
public static String regexIsHanZi=”[\u4e00-\u9fa5]{1,}”;  
 
//查找以Java开头,任意结尾的字符串  
 
public static String regexIsStartJava = “^Java.*”;  
 
//以多条件分割字符串时  
 
public static String regexSplit =”[, |]+”;
public static void main(String[] args) {
   testIsDigit
();
   testIsAlpha
();
   testIsID
();
   testStartEnd
();
   testIsTelePhoneNum
();
   testEmailAddre
();
   testIsHanZi
();              
   testIsStartJava
();
   testSplit
();              
   testReplace
();
   testPattern
();
 
}

 
private static void testPattern() {
     
Pattern pattern = Pattern.compile("");
     
System.out.println(pattern.matches("[0-9]{6}", "200038"));
     
System.out.println(pattern.matches("\\d{6}", "200038"));
 
}

private static void testReplace() {
     
Pattern pattern = Pattern.compile("正则表达式");
     
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
     
//替换第一个符合正则的数据
     
System.out.println(matcher.replaceFirst("Java"));
     pattern
= Pattern.compile("正则表达式");
     matcher
= pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");  
     
//替换所有符合正则的数据  
     
System.out.println(matcher.replaceAll("Java"));    
 
}

 
private static void testSplit() {
     
Pattern pattern = Pattern.compile(regexSplit);
     
String data = "Java Hello World  Java,Hello,,World|Sun";
     
System.out.println(data+" split by:"+regexSplit);
     
String[] strs = pattern.split(data);
     
for (int i=0;i<strs.length;i++) {
         
System.out.println(strs[i]);
     
}
 
}

 
private static void testIsStartJava() {        
     pressInfoByPattern
("Java不是人",regexIsStartJava);
     pressInfoByPattern
("dJava不是人",regexIsStartJava);
 
}

 
private static void testIsHanZi() {
     pressInfo
("验证汉字",regexIsHanZi);
 
}

 
private static void testIsTelePhoneNum() {
     pressInfo
("0733-5544",regexIsTelePhoneNumber);
     pressInfo
("073-566544",regexIsTelePhoneNumber);
     pressInfo
("073566544",regexIsTelePhoneNumber);
     pressInfo
("073--566544",regexIsTelePhoneNumber);
 
}

 
private static void testStartEnd() {
     pressInfo
("JJJKKK",regexIsJJJStartKKKEnd);
     pressInfo
("JJJaaaaKKK",regexIsJJJStartKKKEnd);  
     pressInfo
("JJaaaaKKK",regexIsJJJStartKKKEnd);
     pressInfo
("JJJaaaaKK",regexIsJJJStartKKKEnd);
 
}

 
private static void testIsID() {              
     pressInfo
("111111111111111",regexIsID);
     pressInfo
("11111111111111",regexIsID);    
     pressInfo
("111111111111122221",regexIsID);
     pressInfo
("11111111111112222",regexIsID);                
 
}

 
private static void testIsAlpha() {
     pressInfo
("da",regexIsAlpha);
     pressInfo
("d1a",regexIsAlpha);
 
}

 
private static void testIsDigit() {          
     pressInfo
("21452",regexIsDigital);
     pressInfo
("21a452",regexIsDigital);
     pressInfo
("021452",regexIsDigital);
 
}

 
private static void testEmailAddre() {                      
     pressInfo
("aaa@",regexIsEmail);
     pressInfo
("aaaaaaaa",regexIsEmail);
     pressInfo
("11111@11111fffyu.dfg.com",regexIsEmail);                
 
}

 
private static void pressInfo(String data,String regex) {            
     
if(data.matches(regex)){
         
System.out.println(data+":is match regex:"+regex);
     
}else{
         
System.out.println(data+":is not match regex:"+regex);
     
}
 
}

 
private static void pressInfoByPattern(String data,String regex) {              
     
Pattern pattern = Pattern.compile(regex);
     
Matcher matcher = pattern.matcher(data);
     
if(matcher.matches()){
         
System.out.println(data+":is match regex:"+regex);
     
}else{
         
System.out.println(data+":is not match regex:"+regex);
     
}
 
}

© 著作权归作者所有

Simon丶Ma
粉丝 4
博文 134
码字总数 299850
作品 0
深圳
程序员
私信 提问

暂无文章

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
今天
58
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
今天
27
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
今天
61
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
今天
57
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
今天
50
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部