Java日记之正则表达式(基础语法与在Java中的使用)

  • Post author:
  • Post category:java





前言

先从工具讲起



一、正则表达式是什么?

对待正则表达式 , 应该将其看成是一门独立的语言 , 用于复杂的文本操作中提取相应

规则

对应的文本 , 就是通过一个规则匹配一类字符



二、工具和基本语法

工具使用找在线版的就可以 , 毕竟不会用它来写代码

下面讲讲语法



1.匹配字符

1. \d 匹配任一数字 (注意这里我写的是一)
2. \w 任意字母数字下划线
3. \s 匹配空格或制表符或换行符
4. . 匹配除换行符以外的任一字符 
5. - 区间
6. ^ 匹配除去后接的内容之外的字符


注意 :

在Java中使用的时候 , 上述表达式都

必须加上

\

转义

除了

^



-

[] 可匹配其中任一字符,:
	1.[abc@] 匹配a或b或c或@
	2.[^A-F0-3] 匹配从A~F,0~3之外的字符



2.量词

修饰匹配次数 , 举例说

1. \d{6} 匹配6位数字
2. \d\d{6} 匹配6位数字,再加上前面的一次
3. (\d\d){6} 前面括号内的一组重复64. {m,n} 最少m次,最多n次 [贪婪模式]
5. {m,n}? 匹配3,取下限 [非贪婪模式]
6. {m,} 最少3,不设上限\
7. ? 等价于{0,1} 相当于表达式出现0或一次
8. + \d+ 数字至少出现一次
9. * 等价于{0,} 0次或任意次



3.字符边界


定义 :

匹配字符串中符合条件的位置

1. ^ 于前面的不同,是从字符串开始的地方开始匹配
2. $ 于结束的地方开始匹配
3. \b 匹配一个单词的边界 即匹配位置的前后字符,不全是字母 如word空格
	在d字母,前面是r是字母,后面的空格 ,不是字符  



4.匹配模式

这里在Java中有相应的常量定义

分为

单行模式

(整个文本看成一个字符串) ,

多行模式

(每一行看成字符串) ,

忽略大小写

(不想解释)



5.分支结构

1. | 表示或操作
2. () 捕获组,捕获匹配来的内容
3. 反向引用 \nnn 若有多个括号,()()(),\1表示第一个,\2表示第二个
	EG: ([a-z]\1) 将内容再重复一次 (括号的匹配以左括号为准)
4. (?:exp) 非捕获组 ,匹配到的内容不保存到内存中,所以如果使用\1取不到值



6.预搜索

预搜索是对位置的匹配

1. (?=表达式) 匹配以表达式结尾的字符
2. (?!exp) 匹配不以exp结尾的字符
3. ?<=exp 匹配以exp开头的字符



7.使用正则表达式匹配电话或邮箱

其实网上能找到现成的

电话号码
010-888999  0\d{2,3}-\d{7,9} 最少出现7次最多出现913599999999 1{35789}\d{9} 第二位是35789其一,后接9位数字
邮箱
[\w\-]+@[a-zA-Z0-9]+(\.[A-Za-z]{2,3}){1,2}
[\w]+@[a-zA-Z0-9]+(\.[A-Za-z]{2,3}){1,2}
\w+([-+.]\w+)*@\w+([-.] \w+)*\.\w+([-.]\w+)*



8.在Java中使用正则表达式

使用到的类分别是

Pattern



Matcher

public static void main(String[] args) {
		
		Pattern pattern = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.] \\w+)*\\.\\w+([-.]\\w+)*"); //如果是复制,Java会自动加上\
		Matcher matcher = pattern.matcher("1asnfjddshbhjsdbfj 09 = 16@qq.com []");
		if(matcher.find()) { //匹配到了
			for (int i = 0; i < matcher.groupCount(); i++) {
				System.out.println(matcher.group(i));
			}
		}else {
			System.out.println("meizhaodao");
		}
		
	}



版权声明:本文为qq_45596525原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。