正则表达式

正则表达式: 用来描述符合某种模式(具有某种特征)的一类字符串的表达式.

正则表达式的组成
  • 普通字符: 即普通的字符 (如abcd!@#$等等,这个不需要介绍)
  • 元字符: 具有特殊描述功能的字符 (如.*1|等等,重点是这个)

元字符

元字符主要有以下几类

1.特殊字符(不显示的字符)
元字符含义
\a警报
\b退格, 单词边界
\eESC字符
\f进纸符
\n换行符
\r回车符
\t水平制表符
\v垂直制表符
2.不确定范围的字符组

所谓字符组,就是包含一组特定字符,但只从中选一个.

我的理解是: 在[]中指定一个范围, 从中任意匹配一个

字符含义
[abc]匹配一个a,b ,c中的任意一个字符
[a-z]匹配一个从a到z中的任意一个字符
[^abc]匹配一个非a,b,c中的任意一个字符
[^a-z]匹配一个不在a到z之中的字符
[[a-z]-[abc]]字符组减法
[[a-z] && [ ^abc]]字符组集合运算

注意,

普通字符组[]内其他部分元字符 不起作用,如[.]并不会匹配任意一个字符,而是匹配符号.

普通字符组[]内的\d, \w还是可以使用的

普通字符组内要匹配-,必须写在最前面,如[-abc]

3.确定范围字符组

范围明确,不需要你指定的字符组, 返回一个满足条件的字符

符号含义
.匹配任意字符
\d匹配一个数字
\D匹配一个非数字
\w匹配一个单词字符, 即一个数字或字母
\W匹配一个非单词字符
\s匹配一个空白字符
\S匹配一个非空白字符
4.限定(数量)字符

不匹配任意一个字符,放在匹配表达式后面,用来描述前面表达式的数量

字符含义举例例子解释
*匹配前面的子表达式零次或多次,即a*a出现0次或多次
+匹配前面的子表达式一次或多次a+a至少出现一次
?匹配前面的子表达式零次或一次a?a出现一次或者不出现
{n}匹配确定的 n 次a{5}a必须出现5次
{n,}至少匹配 n 次a{99,}a至少出现99次
{n,m}最少匹配 n 次且最多匹配 m 次a{5,10}a出现5到10次
5.位置元字符
字符含义
^匹配 行/字符串 开始的位置
\A匹配文本起始位置,即第一行开头
$匹配 行/字符串 的结尾
\Z匹配文本结束位置
\b单词边界
\B非单词边界
\G上一次匹配结束的位置
(?= 指定内容 )肯定顺序环视,匹配指定内容前面的位置
(?! 指定内容)否定顺序环视, 匹配非指定内容前面的位置
(?<=指定内容)肯定逆序环视, 匹配指定内容后面的位置
(?<!指定内容)否定逆序环视,匹配非指定内容后面的位置
(?<=指定内容1)(?=指定内容2)匹配指定内容1之后,指定内容2之前的位置

把 1234567变成"1,234,567",可以用"(?<=\d)(?=(\d\d\d)+(?!\d)) "来寻找,的位置.


捕获和引用

符号含义
(指定内容)捕获括号,指定内容匹配成功后,内容被括号捕获,可以引用
\1,\2, …,\n引用, 指定捕获的组号来引用内容, 组号从1开始
(?:指定内容)非捕获括号, 即使指定内容被捕获, 内容也不参与捕获
(?p<指定名字>指定内容)给分组命名,引用时用()
(?>指定内容)固化分组, 简单来讲一直匹配直到不符合条件,且不归还内容
(指定内容1指定内容2

对于捕获和引用, 如在串"12345678900"中,

搜索: (\d{3})(\d{8}) 替换为: 111\2 ,其中\2为组号 ,结果为"1112345678900"


贪婪模式和非贪婪模式

贪婪模式,就是在整个表达式匹配成功的前提下,尽可能多的匹配

非贪婪模式,就是在整个表达式匹配成功的前提下,尽可能少的匹配.

如在’‘bbb>’'中匹配"<\w*>"

贪婪匹配得到: ‘‘bbb>’’; 非贪婪匹配得到: ‘’"

默认匹配为贪婪匹配, 直接使用 * , + 等符号

非贪婪匹配加"?": 如+?, *?

在"abbb"中匹配"ab+", 为贪婪匹配, 得"abbb".

在"abbb"中匹配"ab+?", 为非贪婪匹配, 得"ab".


注释和模式修饰词
表示含义
(?i:指定内容)匹配指定内容,不区分大小写
(?x:指定内容)宽松排列和注释模式
(?s:指定内容)点号通配模式
(?m:指定内容)增强的行锚点模式
(?#指定内容)注释

  1. ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值