正则示例
正则表达式 | 描述 |
---|---|
this is text | 匹配字符串 “this is text” |
this\s+is\s+text | 注意字符串中的 \s+。匹配单词 “this” 后面的 \s+ 可以匹配多个空格,之后匹配 is 字符串,再之后 \s+ 匹配多个空格然后再跟上 text 字符串。可以匹配这个实例:this is text |
^\d+(.\d+)? | ^ 定义了以什么开始; \d+ 匹配一个或多个数字; ? 设置括号内的选项是可选的; . 匹配 “.”; 可以匹配的实例:”5”, “1.5” 和 “2.21”。 |
java中的正则
java.util.regex 包主要包括以下三个类:
Pattern 类:
Pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。- matches() 尝试将整个字符串序列与该模式匹配
- find() 该方法扫码输入的序列, 查找与该模式匹配的
下一个
子序列1
2
3
4
5
6
7
8
9
10Pattern PATTERN = Pattern.compile("\\d+ \\w+");
Matcher matcher = PATTERN.matcher("1 apple");
boolean find = matcher.find();
System.out.println("find:" + find);
boolean find1 = matcher.find();
System.out.println("find1:" + find1);
// output
find:true
find1:false - group() 捕获组取值, 一般与find() 一起用
- group(num) 捕获组取值, 一般与matches() 一起用
PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。
一般是两种用途:
- 判断字符串中是否包含某个子串;
- 提取某个字符串中符合正则规则的内容
注: 正则中的
\
在Java中需要使用\\
正则表达式-匹配字符(集合)
匹配普通字符:
字母、数字、汉字、下划线, 以及没有特殊定义的标点符号匹配转义字符
字符 说明 \n 代表换行符 \t 制表符 \、^、$、(、)、{、}、?、+、*、\、|、[、] 代表字符本身(就是在正则表达式中有特殊作用的字符需要做转义处理) 标准字符集合
字符 说明 \d 数字字符匹配。等效于 [0-9] \w 匹配任何字类字符,包括下划线。与”[A-Za-z0-9_]”等效 \W 与任何非单词字符匹配。与”[^A-Za-z0-9_]”等效 \s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效 \S 匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效 . 匹配除”\r\n”之外的任何单个字符。若要匹配包括”\r\n”在内的任意字符,请使用诸如”[\s\S]”之类的模式 自定义字符集合
[] 方括号匹配方式, 能够匹配方括号中的任意一个字符。字符集合 说明 [ab5@] 匹配 a 或 b 或 5 或 @ [^abc] 匹配 a、 b、 c之外的任意一个字符 [a-z] 匹配 a~z 之间的任意一个字符 [^A-F0-3] 匹配 A F, 03 之外的任意一个字符
注意:
- 正则表达式的特殊符号, 被包含到中括号中, 则失去特殊意义, 除了 ^ 和 - 之外
- 标准字符集合, 除小数点外, 如果被包含于中括号中, 自定义字符集合将包含该集合, 比如: [\d.-+] 将匹配: 数字 或 小数点 或 + 或 -
量词
- 修饰匹配次数的特殊符号。
字符 | 说明 |
---|---|
{n} | n 是非负整数。正好匹配 n 次。例如,”o{2}”与”Bob”中的”o”不匹配,但与”food”中的两个”o”匹配。 |
{n,} | n 是非负整数。至少匹配 n 次。例如,”o{2,}”不匹配”Bob”中的”o”,而匹配”foooood”中的所有 o。”o{1,}”等效于”o+”。”o{0,}”等效于”o*”。 |
{n,m} | m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,”o{1,3}”匹配”fooooood”中的头三个 o。’o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。 |
? | 匹配表达式0次或1次, 相当于 {0,1} |
+ | 表达式至少出现一次, 相当于 {1,} |
* | 表达式不出现或者出现任意次, 相当于{0,} |
注:
- {0,1} 中逗号左边必须有, 不能有 {,6} 这种形式
- 匹配规则默认为贪婪模式, 即匹配字符越多越好
- 匹配次数中的非贪婪模式(匹配字符越少越好, 修饰匹配次数的特殊符合后再加一个 ?)
字符边界
- 匹配符合某种条件的位置
字符 说明 ^ 字符串开始的地方进行匹配([]外) $ 字符串结束的地方进行匹配 \b 匹配一个单次边界,即前面或后面的字符至少有一个是[A-Za-z0-9_]以外的字符 ^A 多行模式下, 匹配第一个出现的字符 ^Z 多行模式下, 匹配最后一个出现的字符
选择符和分组
字符 | 作用 |
---|---|
| |
或 |
() | 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0 …$9 属性从结果”匹配”集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用”(“或者”)“ |
反向引用
- 每一对 ()会分配一个编号, 使用 () 的捕获根据
左括号的顺序
从1开始自动编号 - 通过反向引用, 可以对已捕获的字符串进行引用