Java正则常用规则整理说明

正则表达式通常用于处理字符串,主要功能是 校验(match)分割(split)替换(ReplaceAll)查找(find)


1 常用符号说明

 (1) 常用字符
\                               转义字符
|                               或
\d                              数字:[0-9]   
\w                               单词字符:[a-zA-Z_0-9]
^                               行的开头
$                               行的结尾
\b                              单词边界(指两个单词间的空格部分)
[abc]                           a、b 或 c(简单类)
[^abc]                          任何字符,除了 a、b 或 c(否定)
[a-zA-Z]                        a 到 z 或 A 到 Z,两头的字母包括在内(范围)
(X)                             X,作为捕获组  

(2)数量词
X?                               X,一次或一次也没有 
X*                               X,零次或多次 
X+                               X,一次或多次 
X{n}                             X,恰好 n 次 
X{n,}                            X,至少 n 次 
X{n,m}                           X,至少 n 次,但是不超过 m 次
组说明:组零始终代表整个表达式, 从左到右,按左括号序号对应组号。$1表示组1匹配的内容

2 简单案例


(1)校验(match) 校验手机号码  ①11位数字 ②第二位必须是3或5或8
<span style="white-space:pre">	</span>public static void match_demo(){
<span style="white-space:pre">		</span>//校验手机号码  ①11位数字 ②第二位必须是3或5或8
<span style="white-space:pre">		</span>String phoneNum ="13565557890";
<span style="white-space:pre">		</span>System.out.print(phoneNum.matches("1[358]\\d{9}"));
<span style="white-space:pre">	</span>}
运行结果: true

(2)替换(replaceAll) 格式化句子,将多个空格替换为一个空格
<span style="white-space:pre">	</span>public static void replace_demo(){
		//格式化句子,将多个空格替换为一个空格
		String str = "I    like Tom,     but  tom    like Lucy!";
		System.out.println(str.replaceAll(" +", " "));
	}
运行结果: I like Tom, but tom like Lucy!

(3)分割(split) 分割出所有单词,按符号分,按可能多个空格分割
<span style="white-space:pre">	</span>public static void split_dome(){
		//分割出所有单词,按符号分,按可能多个空格分割
		String str = "I    like Tom,but  tom    like Lucy!";
		String[] strs = str.split(" +|,|!");
		for(String s : strs){
			System.out.println(s);
		}
	}

运行结果:
I
like
Tom
but
tom
like
Lucy

(4)查找
<span style="white-space:pre">	</span>public static void find_demo(){
		//在句子中查找三个字符的单词
		String str = "Iii    like Tom,but  tom    like Lucy!";
		String regex = "\\b[a-zA-z]{3}\\b";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(str);
		while(m.find()){
			System.out.println(m.group() + " ;位置索引 " + m.start()+" : "+m.end());
		}
	}

运行结果:
Iii ;位置索引 0 : 3
Tom ;位置索引 12 : 15
but ;位置索引 16 : 19
tom ;位置索引 21 : 24


3 附 组的相关例子


1 将句子还原成正常句子
<span style="white-space:pre">	</span>public static void dome1(){
		String str = "我我我...我我我我我......我我我我我我爱.......爱爱爱爱爱爱爱...爱学学学学学学学编编....编编编编编编程..程程程程程...程程程";
		System.out.println(str.replaceAll("\\.+", "").replaceAll("(.)\\1+", "$1"));
	}

运行结果:
我爱学编程

2 将IP地址排序
<span style="white-space:pre">	</span>public static void dome2(){
		String ip_str = "192.168.10.34  127.0.0.1  3.3.3.3  105.70.11.55";
		String temp1 = ip_str.replaceAll("(\\d+)", "00$1");
		String temp2 = temp1.replaceAll("0*(\\d{3})", "$1");
		String[] strs = temp2.split(" +");
		TreeSet<String> set = new TreeSet<String>();
		for(String s : strs){
			set.add(s);
		}
		for(String string : set){
			System.out.println(string.replaceAll("0*(\\d+)", "$1"));
		}
	}


运行结果:
3.3.3.3
105.70.11.55
127.0.0.1
192.168.10.34





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值