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

文章目录

  • 前言
  • 一、正则表达式是什么?
  • 二、工具和基本语法
    • 1.匹配字符
    • 2.量词
    • 3.字符边界
    • 4.匹配模式
    • 5.分支结构
    • 6.预搜索
    • 7.使用正则表达式匹配电话或邮箱
    • 8.在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中使用正则表达式

使用到的类分别是PatternMatcher

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

你可能感兴趣的:(#,JavaSE日记,字符串,正则表达式,java,linux,python)