轻松学会正则表达式(标题狗)

it2025-01-20  14

正则表达式

概念

正则表达式是用来描述具有一定特征的字符串的特殊字

符串。Regular Expression。

ab*: a 若干个 b ->* 零个及以上 ,匹配: a ab abbbbb abbbbbbb 不能 bbbbb。 (cd)*: ()->组,改变了优先级 ,若干个 cd,匹配: “” cd cdcd cdcdcd ab*(cd)*:a 若干个 b 和若干个 cd 匹配: a ab abbbbb abbbbbbb acd acdcd abbbbbcd abcd ab*|(cd)*: |或的优先级低 匹配: a ab cd ab|c : 匹配 ab c

作用

验证、查找、替换、分割

匹配规则

1. 特殊字符转义

\d:0-9数字,使用时\要加一个\转义 \d

\w: 26字母大小写,0-9数字 \w

^ 开始标志

$ 结束标志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V5THaOnX-1603278853829)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021172825206.png)]

2.自定义

由 [] 组,只匹配一个, 需要注意以下四个:

^ : 如果在第一个位置,表示取反的含义。

​ -:表示一个区间即范围

​ ] : 最近一个位置为:结束 ,如果要表示普通的]请加 \

​ \ : 转义

[ae134] -> a e 1 3 4 [(as)] ->a s ( ) [a-z] ->小写字母 [-\]a-z\[] -> -[] 及小写字母

3.默认|标准字符类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7e9vdN5f-1603278853832)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021173546907.png)]

h[ea]llo –>hello hallo h(e|a)llo ->hello hallo [\-\\abc] -> - \ a b c \d\s ->一个数字和一个空白 [\d\s] –> 数字 或 空白

3. 量词

匹配的过程中,需要指定次数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZzmzZYUp-1603278853834)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021185857923.png)]

co*ke –> 不限个数的 O co+ke –>至少一个 O co?ke ->1 个或零个 O co{0}ke ->0 个 co{5,}ke –>5 次及以上 co{5,8}ke –> 至少 5 次,最多 8 次 [1-9]\d{3} –>大于等于 1000 小于等于 9999 的数 [1-9]\d{2,4} –>大于等于 100 小于等于 99999 的数 1[34578]\d{9} : 匹配手机号 <[a-zA-Z]+\d?> ->网页标签 <[A-Za-z][A-Za-z0-9]*> ->网页标签

4. 贪婪模式

在匹配次数不定时如 *, {n,}, + 匹配字符越多越好,

默认模式即”贪婪模 ”

贪婪模式 greedy(匹配字符越多越好,可回溯)

? 懒惰模式 lazy reluctant (匹配字符越少越好,可回

溯)

+ 独占模式 possessive(匹配字符越多越好,不可回溯)

用的较少 cokecolacoooooooooooooke

.*o –>贪婪模式 .{2,}o–>贪婪模式 .{2,}?o –>懒惰模式 .{2,}+o –>独占模式,不可回溯 没有匹配到内容。 <.+?> ->找出标签 不要标签内的内容。不是 <.+> <[^>]+>->找出标签 不要标签内的内容。不是<.+>

5.边界

1)、边界不占用宽度,只是一个界限

2)、 ^ :开始 \b :单词边界 \B :非单词边界

$ :结束

^ :多行代表每行头 单行代表整个字符串的开始

$ : 多行代表每行尾 单行代表字符串的结尾

\b : 匹配前面或后面的不是\w

\B : 匹配前面或后面的是\w

查找开头的 hello -> ^hello 找出 独立的单词 world -> \bworld\b 查找结尾的 world -> world$

常用类

java.util.regex Pattern Matcher String

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tm2VQRJQ-1603278853837)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021190732463.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESmYp9td-1603278853840)(C:\Users\lwf\AppData\Roaming\Typora\typora-user-images\image-20201021190805375.png)]

import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author lwf * @title: Demo1 * @projectName 10_21Code * @description: TODO * @date 2020/10/2116:03 */ public class Demo1 { public static void main(String[] args) { String str1="127.124.235.001"; //简单匹配检查ip System.out.println(str1.matches("\\d{1,3}(.\\d{1,3}){3}")); //0-255 ([01]\\d{2})|2([0-4]\\d)|25[0-5] (([01]\d{2})|2([0-4]\d)|25[0-5])(.(([01]\d{2})|2([0-4]\d)|25[0-5])){3} //只能匹配 0-255.0-255.0-255.0-255 且127.0.0.1必须写成127.000.000.001不然无法识别 System.out.println(str1.matches("(([01]\\d{2})|2([0-4]\\d)|25[0-5])(.(([01]\\d{2})|2([0-4]\\d)|25[0-5])){3}")); //Pattern ,Matcher 匹配字符串 //Pattern 调用compile()方法传入正则表达式 //获取到的Pattern对象调用matcher()传入要分析的字符串 //调用get()方法获取是否匹配,参数表示从哪个索引开始查找默认0 String str2="江西上饶beautiful"; Pattern p=Pattern.compile("上"); Matcher matcher=p.matcher(str2); System.out.println(matcher.find(2)); } }

从哪个索引开始查找默认0 String str2=“江西上饶beautiful”; Pattern p=Pattern.compile(“上”); Matcher matcher=p.matcher(str2); System.out.println(matcher.find(2));

}

}

最新回复(0)