正则表达式_概要

来源:互联网 发布:hdmi能传输数据么 编辑:程序博客网 时间:2024/06/05 13:09

标准字符集合

大/小写,大写时相反的意思
\d:任意一个数字0-9
\w:任意一个字母数字下划线
\s:空格、制表符、换行符
.:匹配任意一个换行符以外的符号,若要匹配所有用[\s\S]
转义字符: \

自定义字符集合

[2-8]: 2~8中的任意一个数字

1.特殊符号被包含到中括号中失去特殊含义除了^,-
2.标准字符集合,除小数点外,如果被包含于中括号,自定义字符集合将包含该集合

量词

修饰匹配次数
{n} : 重复n次
{m,n} : 至少重复m,之多重复n次
{m,} :至少重复m次
? : 匹配表达式0次或1次(0~1次)
+ : 至少1次
* : 0次或任意多次


1.只作用于前面的一个表达式,前面的多个表达式可以用()扩在一起,表示一个整体
2.默认贪婪模式,次数越多越好
3.非贪婪模式,在量词后加上?

字符边界

匹配的不是字符而是位置,符合某种条件的位置
^ 与字符串开始的地方匹配(例:^a)
(b)
b 匹配一个单词边界,前面的字符和后面的字符不全是\w

匹配模式

忽略大小写模式:
忽略大小写

单行模式:
整个文本看做一个字符串,只有一个开头和结尾。使用.(小数点)可以匹配包括换行符在内的任意字符

多行模式
使每一行都是一个字符串,每行都有开头和结尾
如果还想获得字符串的开头和结尾元素,可以用\A\Z (例:a\A b\Z)

选择符和分组

|:
():捕获组在被修饰匹配次数时,括号中的表达式可以作为整体被修饰。取匹配结果时,括号中的表达式匹配到的内容可以单独得到
(?:Exception):非捕获组,不保存()中子表达式匹配的内容,匹配后失效

反向引用(\num)

每一对()会分配一个编号,使用()的捕获根据左括号的顺序从1开始自动编号,对分组已捕获的字符串进行引用。(按左括号数计数,起始编号为1)
如:

(a\d?b)\1

是两个ab之间有0/1的数字的结果拼接在一起:abab,a1ba1b

预搜索(零宽断言)

对位置的匹配

(?=exp):断言自身出现的位置后面能匹配exp
(?<=exp):断言自身出现的位置前面能匹配exp
(?!exp):断言自身出现的位置后面不能匹配exp
(?>!exp):断言自身出现的位置前面能匹配exp

满足exp表达式的结果不计入总结果中。
例:
ab(?=ab)
表示ab后面还有ab,即abab

实例:
固定电话: 0\d{2,3}-\d(7,9)
手机号: 1[35789]\d{9}
电子邮件:[\w-]+@[a-z0-9A-Z]+(.[a-zA-Z]){1,2}

固定电话的格式:
在国外拨打到中国的正确格式是:0086+当地区号+电话号码
在国内的拨打正确格式是:当地区号+电话号码
3位区号8位号码或者4位区号7位号码

0 0