JAVA基础总结(七)之正则表达式

简介

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

主要对字符串进行合法验证

正则表达式是一种通用的技术。适用于绝大多数流行的编程语言

好处

[a-zA-Z]\w{5,17}是一个正则表达式
用精简的语法代替了复杂的验证逻辑
极大的提高了开发效率

单字符匹配

JAVA基础总结(七)之正则表达式_第1张图片
[bat] 代表这个字符必须要是中括号里面其中一个即可

[^abc] 代表除了abc以为的任意字符就可以。^ 是异或符号

[a-zA-z]代表是大小写字母的所有字母

[a-d[m-p]] 等于[a-dm-p] 同时包含a-d m-p的所有字母

[a-z&&[def]] 代表a-z里面包含def的值

[a-z&&[^bc]] a-z里面非bc的所有字母

[a-z&&[^m-p]] a-z里面除了m-p的所有字母

预定义字符

JAVA基础总结(七)之正则表达式_第2张图片
注意在java中 \ 会转义,所以需要进行编译需要多加一个\ 例如\d需要 \d
\d 代表0-9的阿拉伯数字
\D 非数字
注意的是在程序中,单词注意是大小写字母与阿拉伯数字下划线。为单词

量词

JAVA基础总结(七)之正则表达式_第3张图片
String regex = “6{4}”
x{m} 代表一个x出现了m次。例如上面的代表4需要出现4次则匹配

x{n, m} 代表n到m次。6{1,3}代表6出现1-3次

x{n, } 代表6最少出现n次
以此类推

例如:
x{n} 需要x出现n次
JAVA基础总结(七)之正则表达式_第4张图片

贪婪,勉强,独占的区别

  • 贪婪
    • 先吞掉整个字符串进行匹配,如果匹配失败,则吐出最后一个字符串。然后再次匹配。重复过程。最后匹配成功
  • 勉强
    • 先吞掉字符串的第一个字符串,如果失败,则再次吞掉下一个字符串。以此重复。一直到成功
  • 独占
    • 吞掉整个字符串进行唯一匹配

Matches,Patterm

JAVA基础总结(七)之正则表达式_第5张图片
主要是Matches有多个方法使用。例如find,start,group,end等

Matches

		String input = "111_234_455_555";
		// 查询字符串是否有连续的3个数字
		String regex = "\\d{3}";
		// 检查正则是否正确
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(input);
		if(m.find()){
			// 获取匹配成功的字符串
			m.group();
			// 获取匹配成功的字符串的范围。开始于结束
			m.start();
			m.end();
		}

捕获组

在正则中,小括号() 表示捕获组
这个组,也就是在匹配的时候知,将某一部分的字符(道串)作为组处理,这个组,可以在正则表达式的其它位置或者匹配回的结果中使用,如:
^\s+([a-zA-Z]+?)\s.+$
匹配 " abcd 这是什么答"
如果没有小括号,那么匹配只有一个结果,也就是整个字符串" abcd 这是什么"
而添加了小括号,匹配就会有两个结果了:
1 " abcd 这是什么"
2 “abcd”

非捕获组-反向引用

非捕获组只匹配结果,但不捕获结果,也不会分配组号,当然也不能在表达式和程序中做进一步处理。

首先(?:pattern)与(pattern)不同之处只是在于不捕获结果。

接下来的四个非捕获组用于匹配pattern(或者不匹配pattern)位置之前(或之后)的内容。匹配的结果不包括pattern。
参与匹配却不进行分组编号的捕获组,其形式为(?:exp)组c成

边界匹配符

JAVA基础总结(七)之正则表达式_第6张图片
那些是单词边界
除了大小写英文,阿拉伯数字,下划线,其他国家正常文字。

你可能感兴趣的:(JAVA专栏,字符串,正则表达式,java)