正则表达式(RegExp)指南
正则表达式(Regular Expression,简称RegExp)是一种用于匹配字符串中字符组合的工具,在文本处理、数据验证和搜索替换等任务中,正则表达式是非常强大的工具,本文将详细介绍正则表达式的基本概念、常用语法及应用实例。
一、基本概念
正则表达式由普通字符(例如字母和数字)以及特殊字符(称为元字符)组成,元字符用于指定特定的搜索模式,如“^”表示行的开始,“$”表示行的结束。
二、常用语法
1、字符匹配
.
: 匹配除换行符以外的任意单个字符。
d
: 匹配任何数字字符,等价于[0-9]
。
D
: 匹配任何非数字字符。
w
: 匹配任何单词字符(字母、数字或下划线),等价于[A-Za-z0-9_]
。
W
: 匹配任何非单词字符。
s
: 匹配任何空白字符(空格、制表符等)。
S
: 匹配任何非空白字符。
2、字符类
[abc]
: 匹配方括号内的任意一个字符。
[^abc]
: 匹配不在方括号内的任意字符。
[a-z]
: 匹配从a到z的任意一个小写字母。
[A-Z]
: 匹配从A到Z的任意一个大写字母。
[0-9]
: 匹配从0到9的任意一个数字。
3、预定义字符类
d
: 匹配任何数字字符,等价于[0-9]
。
D
: 匹配任何非数字字符,等价于[^0-9]
。
w
: 匹配任何单词字符,等价于[A-Za-z0-9_]
。
W
: 匹配任何非单词字符,等价于[^A-Za-z0-9_]
。
s
: 匹配任何空白字符,等价于`[ t
rfv]`。
S
: 匹配任何非空白字符,等价于`[^ t
rfv]`。
4、量词
: 匹配前面的子表达式零次或多次。
+
: 匹配前面的子表达式一次或多次。
?
: 匹配前面的子表达式零次或一次。
{n}
: 恰好匹配n次。
{n,}
: 至少匹配n次。
{n,m}
: 匹配n到m次。
5、边界匹配
^
: 匹配输入字符串的开始位置。
$
: 匹配输入字符串的结束位置。
b
: 匹配一个单词边界。
B
: 匹配不是一个单词边界。
6、分组和分支
(...)
: 分组,用于捕获匹配的子字符串。
|
: 逻辑或,用于分隔备选分支。
7、转义字符
\
: 对特殊字符进行转义。
三、应用实例
以下是一些常见的正则表达式应用实例:
1、验证电子邮件地址
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$
2、匹配电话号码
(?:(d{3})|d{3})[-s]?d{3}[-s]?d{4}
3、提取URL
(https?://[^s]+)
4、查找重复的单词
b(w+)s+1b
四、表格展示常用正则表达式符号及其含义
符号 | 含义 | |
. | 匹配除换行符以外的任意单个字符 | |
| 匹配前面的子表达式零次或多次 | |
+ | 匹配前面的子表达式一次或多次 | |
? | 匹配前面的子表达式零次或一次 | |
{n} | 恰好匹配n次 | |
{n,} | 至少匹配n次 | |
{n,m} | 匹配n到m次 | |
[] | 字符类,匹配方括号内的任意一个字符 | |
| 逻辑或,用于分隔备选分支 | |
() | 分组,用于捕获匹配的子字符串 | |
^ | 匹配输入字符串的开始位置 | |
$ | 匹配输入字符串的结束位置 | |
d | 匹配任何数字字符,等价于[0-9] | |
D | 匹配任何非数字字符,等价于[^0-9] | |
w | 匹配任何单词字符,等价于[A-Za-z0-9_] | |
W | 匹配任何非单词字符,等价于[^A-Za-z0-9_] | |
s | 匹配任何空白字符,等价于`[ t |
rfv]` |
|S
| 匹配任何非空白字符,等价于`[^ t
rfv]` |
|b
| 匹配一个单词边界 |
|B
| 匹配不是一个单词边界 |
|\
| 对特殊字符进行转义 |
五、FAQs
Q1: 如何在正则表达式中匹配一个具体的数字?
A1: 要在正则表达式中匹配一个具体的数字,可以使用字符类或者直接书写该数字,要匹配数字5,可以使用以下正则表达式:
5
或者使用预定义字符类:
d{1}
注意:这里d{1}
表示恰好匹配一次数字字符,即一位数字,如果要匹配多个具体的数字,可以扩展字符类或使用其他量词,要匹配数字123,可以使用:
123
或者:
d{3}
并确保输入文本中的数字顺序与正则表达式一致。
Q2: 如何在正则表达式中进行否定匹配?
A2: 在正则表达式中进行否定匹配可以使用多种方法,具体取决于你想要否定的是什么,如果你想要否定整个表达式的匹配,可以在正则表达式的开头添加一个否定前瞻断言,要匹配不包含特定子字符串的文本,可以使用如下正则表达式:
^((?!forbidden).)*$
这里,(?!forbidden)
是一个否定前瞻断言,表示后面不能紧跟着"forbidden"这个子字符串,而.*?
表示任意数量的任何字符(尽量少匹配),整个正则表达式的意思是匹配不包含"forbidden"的所有字符串,如果你只想否定部分模式的匹配,例如不匹配某个特定的字符集,可以使用否定字符类,要匹配除了数字以外的任何字符,可以使用:
[^0-9]
这里,[^0-9]
表示匹配任何不是数字的字符。
以上内容就是解答有关“RegExp”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1354123.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复