JAVA中的正则表达式(pattern/match)

正则表达式概念

所谓正则表达式就是处理字符串的特殊字符串
用途
	字符串匹配(字符匹配)
	字符串查找(是建立在匹配之上的查找)
	字符串替换(是建立在查找的结果之后的替换)
例如
	IP地址是否正确
	从网页中揪出Email地址
	从网页揪出链接
类
	java.lang.String
	java.util.regex.Pattern
	java.util.regex.Matcher
要点		
	//一个反斜线
	String str1 = "\\";
	//正则表达式的一个反斜线使用两个反斜线,在java中表示就再需要两个反斜线转义
	System.out.println(str1.matches("\\\\"));
	//POSIX Style,这种写法不建议使用,如果要使用查API
	System.out.println("a".matches("\\p{Lower}"));
	//空白行
	" \n".matches("^[\\s&&[^\n]]*\\n$");
	//邮箱
	String regex1 = "[\\w[.-]]+";
	String regex2 = "@";
	String regex3 = "[\\w[.-]]+";
	String regex4 = "\\.";
	String regex5 = "[\\w]+";
	String regex = regex1+regex2+regex3+regex4+regex5;
	System.out.println("156112846@qq.com".matches(regex));

正则表达式的基本语法

普通字符(字母,数字,汉字,下划线)		
	一个普通字符在表达式中只匹配与之相同的一个字符
	表达式k在字符串sky进行匹配时,将匹配成功
\r,\n,\t,\f
	表示回车符,换行符,制表符,换页符
.	
	任意一个字符
X?	
	表示X可以出现0次或者1次
X+	
	表示X可以出现1次或者多次
X*
	表示X可以出现任意次
X{n}
	表示X可以出现n次
X{m,n}
	表示X可以最少出现m次,最多出现n次
X{n,}
	表示X最少出现n次
[ ]
	匹配中括号中任意一个字符
[^ ]
	匹配中括号中字符之外的任意一个字符
\d
	表示0~9之间的任意一个数字字符,即[0-9]
\D
	表示0~9之外的任意数字字符,即[^0-9]
\r,\n,\t,\f
	表示回车符,换行符,制表符,换页符
\s
	表示空格,制表符,换页符等空白字符的任意一个
\S
	表示空白字符以外的任意一个字符,即[^\s]
\w
	表示字母,数字,下划线中的任意一个字符,即[a-zA-Z_0-9]
\W
	表示字母,数字,下划线以外的任意一个字符,即[^a-zA-Z_0-9]
^
	该符号不匹配任何字符,字符串开始的位置,即^h必须以h开头
$
	该符号不匹配任何字符,字符串结束的位置,即r$必须以r结尾
\b
	该符号不匹配任何字符,表示单词的边界
\B
	该符号不匹配任何字符,表示非单词的边界,即[^\b]
|
	用来连接两个表达式,表示或的关系
	X|Y 表示X或者Y中的任意字符
()
	作为一个单元,一个分组
\n(n表示一个数字)
	有分组的情况下,表示对分组的引用
	\1表示对分组1的引用
\
	转义字符,当一个符号自身有意义而又要表示这个字符的时候,就需要转义
	\^表示^,\$表示$
?
	如果在?,+,*,{n},{m,n},{n,}后面,表示次数按非贪婪模式进行匹配,
		即按照匹配模式进行最小限度的匹配

贪婪 VS 非贪婪 VS 独占


import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Test {
	public static void main(String[] args) throws Exception {
		String str = "aaaa5bbbb6";
 
		/*
		 * 贪婪的
		 * 一次吃进最多的10个字符,不匹配,再吐出来一个,匹配了,结束了
		 */
		String regex1 = ".{3,10}[0-9]";
		Matcher m1 = Pattern.compile(regex1).matcher(str);
		if (m1.find())
			System.out.println(m1.start() + "-" + m1.end());
		else
			System.out.println("not match!");
 
		/*
		 * 非贪婪的
		 * 一次吃进最少的3个字符,然后看后面哪个是不是数字,
		 * 再吞一个,然后再看后面哪个是不是数字,匹配了,结束了
		 */
		regex1 = ".{3,10}?[0-9]";
		m1 = Pattern.compile(regex1).matcher(str);
		if (m1.find())
			System.out.println(m1.start() + "-" + m1.end());
		else
			System.out.println("not match!");
 
		/*
		 * 独占的
		 * 一次吃进最多的10个字符,不匹配,不吐出来,不匹配了,结束了
		 */
		regex1 = ".{3,10}+[0-9]";
		m1 = Pattern.compile(regex1).matcher(str);
		if (m1.find())
			System.out.println(m1.start() + "-" + m1.end());
		else
			System.out.println("not match!");
	}
}
/*
打印结果:
	0-10
	0-5
	not match!
*/

转载地址:https://blog.csdn.net/itlwc/article/details/10145987

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值