语法
非打印字符
\f 换页符
\n 换行符
\r 回车符
\s 匹配任何空白字符,等价于 [ \f\n\r\t\v]
\S 匹配任何非空白字符, [^ \f\n\r\t\v]
\t 制表符
特殊字符
$ 结尾
() 子表达式
- 0-多次
- 1-多次
. 除换行符外任何单个字符
?0-1次
^ 匹配开始 在方括号内的话表示不接受
限定符
{n}匹配前面的字符n次
{n,}匹配前面的字符至少n次
{n, m}匹配前面的字符n-m次
** 、+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。*
例如<h1>xxxxx</h1>
使用/<.>/会全部匹配上,如果使用/<.?>/则只会匹配<h1>
定位符
^ 开头
$ 结尾
\b 匹配单词边界
\B 匹配非单词边界
元字符
\w 匹配字母、数字、下划线
(?:pattern) 不会缓存的子表达式
(?=pattern)正向肯定预查,满足这个pattern的内容并不会被取出
(?!pattern) 正向否定预查,不满足这个pattern的内容能够被选中但不会被取出
php正则使用
定界符/$%^@中任意一个
模式修正符:i 不区分大小写, g全局
preg_match(pattern, str, matches) 将把结果放入matches中并返回匹配次数,仅匹配一次
preg_match_all 全文匹配,匹配多次
preg_replace(pattern, replacement, str)
python 正则使用
re.match(pattern, str) 从str开头开始进行匹配,返回一个匹配对象否则返回none
匹配对象的函数:
group(N)返回匹配的第N个子表达式内容,若没有N则返回整个匹配内容
span()返回匹配上的字符串在str的开始和结尾位置的一个元组
re.search(pattern, str)则不需要从str开头进行比较,会进行全文扫描,直到匹配上
re.sub(pattern, replacement, str)返回替换后的字符串
go 正则使用
str := "880218end"
res, _ := regexp.MatchString("\\w{9}", str) //测试一个字符串是否满足正则
fmt.Println(res) //返回true
r, _ := regexp.Compile("p([a-z]+)ch") //生成一个正则对象
fmt.Println(r.MatchString("peach")) //返回true
fmt.Println(r.FindString("peach punch")) //返回peach,仅会匹配一次就返回
fmt.Println(r.FindStringIndex("peach punch")) //返回[0, 5] 第一次匹配到的index范围
fmt.Println(r.FindStringSubmatch("peach punch")) //返回[peach ea] 第一次匹配到的完全匹配和局部匹配
fmt.Println(r.FindAllString("peach punch pinch", -1)) //返回[peach punch pinch] 匹配多次,全文搜索, -1代表不限次,也可以限定次数
fmt.Println(r.ReplaceAllString("a peach", "watermelon")) //返回a watermelon 替换
常用正则
中文: \u4E00-\u9FA5
Email:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$ //([-+.]\w+)是为了适配多个节的,例如xx.xx@xx.xx.x
URL:^(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=_|!:,.;]+[-A-Za-z0-9+&@#/%=_|]