Java正则表达式——笔记

一、Java正则表达式

在其他语言中,\\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠

在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。

如果想让修饰符只是一个字符,没有修饰,则需要这样:\\*表示一个普通的星号,*则表示匹配0次或多次

格式: <特殊符号或字符><修饰符>

1、修饰符

修饰符 能修改匹配前面 特殊符号或字符 的次数

字符说明
*零次或多次匹配前面的字符或子表达式。最少匹配0次
+一次或多次匹配前面的字符或子表达式。最少匹配1次
?零次或一次匹配前面的字符或子表达式。只能匹配1次或0次
{n}正好匹配 n 次。规则:n <=0
{n,}至少匹配 n 次。规则:n<=0
{n,m}匹配至少 n 次,至多 m 次。规则:n<=0,m<=0, n <= m

2、分组

正常情况下,修饰符只能匹配前一个字符或正则特殊符号,不能匹配多个字符,这时候分组就有必要了。

74{3}匹配结果7444

(74){3}匹配结果747474

这就是区别,分组用括号表示

3、正则特殊符号

这里的正则符号用单反斜杠表示,java实际使用需要双反斜杠

2.1、常见符号
符号作用
\正则基本标识符,将下一字符标记为特殊字符、文本、反向引用或八进制转义符。
A匹配一个字符A
\d匹配一个数字(0~9)
\D匹配一个非数字
\w匹配一个字符(a~z A~Z 0~9)
\W匹配一个非单词、非数字的字符(空格,逗号)
\s匹配一个空白符(空格、tab、换行、换页、回车)
\S匹配一个非空白符(可以用匹配空白符取反表示非空白符)
.匹配除"\r \n"之外的任何单个字符,注意不需要使用反斜杠,直接使用点就行
\t匹配一个制表符Tab
\n匹配一个换行符
\r匹配一个回车
\f匹配一个换页
\e匹配一个转义(Escape)
\xhh匹配一个 十六进制 值为0xhh的字符
\uhhhh匹配一个 十六进制 表现为0xhhhh的Unicode字符
2.2、逻辑符号

逻辑符号一般建议分组,也就是使用括号,防止混淆

符号作用
&&与,相交部分
|
^
2.3、多选一格式

使用方括号 括起来的内容能匹配符合内容的任意一个

格式:[ 表达式 ] ,总是先计算表达式,然后匹配

表达式含义
[abc]包含a、b或c的任何字符
[^abc]除a、b和c之外的任何字符(否定)
[a-zA-Z]从a到z或从A到Z的任何字符(范围)
[abc[hij]]a、b、c、h、i、j中的任意字符
[a-z&&[hij]]任意h、i或j(交)
2.4、边界匹配符

顾名思义,以下的匹配符能匹配字段、行的开始和结束

边界匹配符含义
^一行的开始
$一行的结束
\b词的边界
\B非词的边界
\G前一个匹配的结束

4、匹配模式——量词

贪婪型: 贪婪表达式会为所有可能的模式发现尽可能多的匹配。

懒惰型: 用问号来指定,这个量词匹配满足模式所需的最少字符数。

占有型: 目前,这种类型的量词只有在 Java 语言中才可用(在其他语言中不可用),并且也更高级,因此我们大概不会立刻用到它。当正则表达式被应用于 String 时,它会产生相当多的状态,以便在匹配失败时可以回溯。而“占有的”量词并不保存这些中间状态,因此它们可以防止回溯。它们常常用于防止正则表达式失控,因此可以使正则表达式执行起来更高效。

下面表中X是表达式,建议用圆括号括起来

贪婪型懒惰型占有型如何匹配
X?X??X?+一个或零个X
X*X*?X*+零个或多个X
X+X+?X++一个或多个X
X{n}X{n}?X{n}+恰好nX
X{n,}X{n,}?X{n,}+至少nX
X{n,m}X{n,m}?X{n,m}+X至少n次,但不超过m

5、易混淆点

5.1、括号的区别

()表示分组,例如(ab)*可以匹配ababab

[]表示多选一,例如[ab]可以匹配到a或者b

{}表示匹配次数区间,这是个修饰符,例如a{1,3}可以匹配a、aa、aaa

5.2、^的两种不同状态
  • 在多选一[]中是逻辑非,例如[^a-z]可以匹配到 非a-z 的字母一次,匹配多次需要修饰符

  • 除此之外表示开头,例如^a可以匹配a开头的

6、案例备用

^a.* 以a开头的任意字符(除特殊符号 回车和换行)

^[\\w\\s]以匹配任意开头

二、JavaScript正则表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值