正则表达式

正则表达式

由普通字符以及特殊字符组成的文字模式

1 基本语法及使用

(1)例子
如要找出文档里的所有we单词,如果直接输入we可能会把well,wet等也匹配进来
但如果加上\bwe\b则可以解决这个问题,这是因为\b是一个特殊的元字符,代表单词的开头或结尾

(2)常用元字符
元字符的四种作用:匹配字符、匹配位置、匹配数量和匹配模式。

常见元字符
.匹配除换行符以外的任意字符
\b匹配单词的开始或结束
\d匹配数字
\w匹配字母、数字、下划线或汉字
\s匹配任意空白符,包括空格、制表符、换行符、中文全角空格等
^匹配字符串的开始
$匹配字符串的结束

eg:匹配所有以s开头的单词可以用:"\bs\w*\b",以s开头的字符串可用"^\s\w*$"

(3)字符转义
用于查找特殊字符时,可用”\“来取消特殊字符的特殊意义
eg:①查找“.”,“\”时,可以写成“.”,“\”
②查找“www.baidu.com”时可用“www.baidu.com”来查找

(4)重复

常用限定符
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

eg:
①hello\d+:匹配hello后面跟1个或更多数字,例如hello1或者hello10等情况
②^\d{5,12}$:匹配5到12个数字的字符串,例如QQ号

③^\d{11}$:匹配11个数字的字符串,例如电话号码,身份证号码,学号等也可类似
④word\d?:匹配word后面更0个或1个数字的情况。

(5) 字符集合
自定义字符集合:通过[]来实现
eg:①[abcde]是匹配abcde中的任意一个字符,[.?!]匹配.?!中的任意一个
②指定范围的[0-9]等价\d,[a-z0-9A-Z]等价于\w

(6)分支条件
指正则表达式里面有几种匹配条件,满足其中任意一种都应该匹配,具体方法是"|"把不同的规则分隔开。
同时需要注意的是,匹配条件时,将会从左到右的测试每个条件,如果满足了某一个条件就不管其他条件。
eg:匹配电话号码时,电话号码一种是:三位区号-八位本地号,四位区号-七位本地号;
可用0\d{2}-\d{8}|0\d{3}-\d{7}进行匹配

(7) 分组
以写出一个IP地址表达式为例。
eg:①((\d{1,3}).){3}\d{1,3}。这个可能匹配出333.444.555.666之类的不存在的地址,故需要改进
②((25{0-5}|2{0-4}{0-9}|[0-1]\d{2}|[1-9]?\d).){3}(25{0-5}|2{0-4}{0-9}|[0-1]\d{2}|[1-9]?\d)

(8) 反义

\B匹配不是单词的开始或结束
\D匹配任意非数字的字符
\D+匹配非数字的一个或多个字符
\W匹配任意不是字母、数字、下划线或汉字的字符
\S匹配任意不是空白符(括空格、制表符、换行符、中文全角空格等)的字符
{^a}匹配除了a以外的任意字符
{^abcde}匹配除了abcde以外的字符

(9) 后向引用
使用小括号指定一个表达式就可以看做一个分组。以分组的左括号为标志,第一个出现分组的组号为一,第二个为2。
也可以自定义子表达式的组名,使用(?\d+)或者(?‘Digit’\d+),就把"\d+"的组名指定为Digit了。要反向引用这个组捕获的内容,可以使用\k

捕获
(exp)匹配exp,并捕文本到自动命名的组里
(?exp)匹配exp,并捕获文本到名称为name的组里,也可写成(?'name’exp)
(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号

(10) 零宽断言

(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!exp)匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置

(11) 注释

(?#comment)不对正则表达式的处理产生任何影响,只用于提供注释

eg:\b\w+(?#字符串)\b

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值