正则表达式
November 08, 2023
2119
一、几个常用规则
(一)完全匹配
正则表达式是用来匹配文本的,现在假设我们要匹配 “abcdefg” 这一字符串中的 “abc” 三个字母,我们该怎么写呢?
1
2abc
复制代码如果正则表达式的匹配内容很简单,也很明确,可以进行完全匹配,写出来的结果就是这样的。
(二)一些常用字符
1、符号 |
"|"
这个字符,表示 或,即匹配 ab 或者 ef1
2
3
4
5
6// 要求:在 "acabcdefgh acbbcdefgh accbcdefgh" 字符串中,要匹配 "abcdef","bbcdef","cbcdef" 三个子串
abcdef|bbcdef|cbcdef
写法正确,不过略显繁琐。我们的写法如下:
(a|b|c)bcdef
2、符号 []
中括号是字符集的意思( 集合 ),里面包含的字符,都是或(”|”)的关系
1
2
3
4
5ac[a-c]bcdef
// "[a-c]" 表示的是匹配 a-c 之间的任意字符。
[^a-c]
// 匹配 a-c 范围以外其他的字符 ^搭配[]使用,取反的作用
3、限制符号 * + ? {}
简析
1
2
3
4
5{n,m} // 表示匹配前面子表达式至少N次,最多m次
* // 等价于 {0,} 匹配前面子表达式,0次或者多次
+ // 等价于 {1,} 匹配前面子表达式,1次或者多次
? // 等价于 {0,1} 匹配前面子表达式,0次或者1次
4、几个转义字符
"\d"
表示匹配数字字符,等价于 “[0-9]”。"\D"
表示匹配非数字字符,等价于 “[^0-9]”。"\n"
表示匹配换行符。"\s"
表示匹配任何空白字符,等价于 “[\f\n\r\t\v]”。"\S"
表示匹配任何非空白字符,等价于 “[^\f\n\r\t\v]”
5、符号 .
- 符号
"."
会匹配 “\n” 以外的所有字符,也是比较常用的。
6、符号 ?
"?"
符号的非贪婪匹配限制字符 “* + ? {}” 默认的匹配规则是贪婪的。什么意思呢?
比如说有一个字符串 “abbbbb”,我们使用正则表达式 “ab+” 去匹配,匹配的结果是 “abbbbb”,会尽可能多的去匹配满足的字符。
我们如果想尽可能少的匹配满足的字符,那么就在限定符后面加 “?”。
7、符号 ()
- 小括号的含义是分组,可以理解为被小括号包含的子表达式就是一个分组
二、例子简析
1、例子1
** IP 地址的正则表达式**:”((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)”
第一段
"(2[0-4]\d|25[0-5]|[01]?\d\d?)\.)"
,这里用 “|” 分割了三种匹配情况。1
2
3
4// 第一种是 "2[0-4]\d",即三位数字,第一位是 2,第二位是 0 - 4 之间,第三位是任意数字。
// 第二种是 "25[0-5]",三位数字,第一位是 2,第二位是 5,第三位是 0 - 5 之间。
// 第三种是 "[01]?\d\d?",第一位是 0 或者 1,匹配零次或一次,第二位和第三位是任意数字,第三位数字匹配零次或一次,也就是 一位数,两位数,三位数都可能满足这种情况。
// 第一段末尾是 "\." 作为分隔符。第二段
"{3}"
,这个表示前面的子表达式重复三次,也就是 IP 地址的前三个字节第三段 “(2[0-4]\d|25[0-5]|[01]?\d\d?)”,和第一段是一样的
2、例子2
- 匹配电子邮箱:”([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})”
- 第一段
"([a-z0-9_\.-]+)"
,表示匹配 a-z 范围内的字母,0-9 范围的数字,以及 “_”,”.”,”-“ 三个字符,”+” 表示至少有一个字符 - 第二段
"@"
表示匹配 “@” 字符 - 第三段
"([\da-z\.-]+)"
,”\d” 表示匹配任意数字,a-z 范围的字母,”.”,”-“ 两个字符,”+” 至少有一个字符。 - 第四段
"\."
表示匹配 “.” 字符 - 第五段
"([a-z\.]{2,6})"
,表示匹配 a-z 范围的字母,”.” 字符,”{2,6}” 表示至少 2 个字符,至多 6 个字符
- 本文作者:wowangmouren
- 本文链接:https://wangwewntao.top/2023/11/08/wmr_21/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!