Java - 常用正则表达式(持续完善。。。)

这篇博客深入探讨了正则表达式的基础语法,包括定位符、数量表示、字符集、分组和引用以及断言。同时,详细解释了各种修饰符的作用,如i、g、m等,并通过实例展示了它们在Java Pattern类中的应用。此外,还分享了一些实用的正则表达式示例,如匹配.png图片和验证密码格式。
摘要由CSDN通过智能技术生成

基本语法

表达式描述
定位符
^匹配字符串的开始位置。在 [] (方括号)中使用时,表示不匹配 [] 中的字符集合。要匹配 ^ 字符,请使用 \^
$匹配字符串的结尾位置。只有设置了 RegExp 对象的 Multiline 属性,才会匹配 \n\r。要匹配 $ 字符,请使用 \$
\b匹配一个单词的边界,即字与空格间的位置
\B非单词边界匹配
数量表示
?匹配前面的子表达式零次或一次。要匹配 ? 字符,请使用 \?
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
|或运算符,指明两项之间匹配任意一个。要匹配 |,请使用 \|
{m}匹配前面的表达式m个
{m,}匹配前面的表达式最少m个
{m,n}匹配前面的表达式最少m个,最多n个
字符
.匹配除换行符 \n 以外的任何单个字符。要匹配 . 字符,请使用 \.
\转义字符
\w匹配任何字母数字,包括下划线(等价于 [A-Za-z0-9_]
\W匹配任何非字母数字以及下划线(等价于 [^A-Za-z0-9_]
\d匹配任何数字
\D匹配任何非数字
\s匹配任何空白字符,包括空格、制表符等
\S匹配任何非空白字符
[abc]匹配集合中包含的任一字符
[^abc]匹配任何不在集合中的字符
[a-z]匹配指定范围内的任意字符
分组和引用
(expression)匹配括号里的整个表达式
(?:expression)匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用
\num对前面所匹配分组的引用。比如 (\d)\1 可以匹配两个相同的数字,(a)\1 会匹配到 aa(a)(b)\1\2 会匹配到 abab
断言
(?=)正向预查
(?!)正向否定预查
(?<=)反向预查
(?<!)反向否定预查

修饰符

正则表达式的修饰符用于指定额外的匹配策略,格式如下:

/pattern/flags

/.../i
/.../g
/.../m
修饰符描述
iignore - 不区分大小写
gglobal - 全局匹配
mmulti line - 多行匹配
s. 匹配符会匹配 \n 换行符,默认不匹配
x忽略空格
e配合函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行。
A强制从目标字符串开头匹配,相当于元字符^。
Z强制以目标字符串结尾匹配,相当于元字符$。
D模式中$仅匹配目标字符串结尾,不可与换行符\n匹配,无它可以匹配换行符结尾的字符串。
U只匹配最近的一个字符串;不重复匹配。

Java - Pattern 类

Java 语言中使用正则表达式,需要借助 Pattern 类:

public final class Pattern implements java.io.Serializable {
	...
}

Pattern 类用于创建一个正则表达式,通过两个静态方法调用私有构造器创建:

public static Pattern compile(String regex) {
 return new Pattern(regex, 0);
}

public static Pattern compile(String regex, int flags) {
 return new Pattern(regex, flags);
}

第一个参数是正则表达式,第二个参数是匹配模式(一个16进制的标识,Pattern 中定义的常量),对应上面的 修饰符

在这里插入图片描述

下面分别举例说明:

1:Pattern.CASE_INSENSITIVE 等同于修饰符 i: 不区分大小写。

2:m 可以匹配多行字符,即字符串中包括换行也可以,如: 字符串 ”bacd\nabde\nabgh",匹配规则:/ab/ ,没有匹配字符串,规则:/ab/m 可以匹配到第二行,第三行其实也是相符的,但单加上m只匹配到第一条,在python中使用re.findall就匹配全部,这个参数在此函数中不起作用。

3:g 全局匹配,上面规则改成:/ab/mg 就会匹配所有符合条件的字符,无论多少行,上面例子可以匹配后两行,python无些参数,本身就是全局搜索。

4:s 可以匹配换行符。如: 字符串 ”bacd\nabde\nabgh",re.findall(‘cd.’,s),没有匹配字符串,改成:re.findall(‘cd.’,s,re.S),就可以匹配’cd\n’,也就是加了这个修正符,可以将\n视为一个换行符号,否则将视为普通字符。

5:X,忽略模式中空格,如: 字符串 ”bacd\nabde\nabgh",re.findall(’ c d’,s),没有匹配的字符串,改成:re.findall(’ c d’,s,re.X),就和’cd\n’中的cd匹配成功。

6:A 强制从头开始匹配。如: 字符串 ”bacdefg", /ac/gi能匹不个字符,因为不是ac开头的,python中的re.A参数表示的是ascii码,在python中本身就是从头搜索的,所以无些参数。

7:Z 强制结尾匹配,/ab/Z,只能匹配字符串“efgab",而不能匹配"abcdef"因为不是以ab结尾的,python中fqhx无此参数。

8:D 不可匹配结尾的换行符。/ef$/D不能匹配"abcdef\n",而只能匹配"abcdef",去除/D修正符,可以匹配两个字符串。

9:U 只匹配最近一个字符串,也就是第一次出现的,python中的re.search()本身就是搜索到第一次的,在python中re.U是指指定的目标串是Unicode字符串。


常用正则表达式(持续完善。。。)

匹配 .png 结尾的图片

\.png$

判断密码只能包含英文和数字

^[A-Za-z0-9]+$
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值