正则表达式——正则入门

正则表达式——正则入门

正则测试地址:https://regex101.com/

先从一个例子开始正则表达式。

书写一个匹配手机号的正则表达式,为了方便讨论,假定手机号是1开头,第二位只能是3、5、8中的其中一个,总共11位的数字,形如13xxxxxxxxx。

匹配手机号的正则表达式为:^1[358]\d{9}$,下面介绍此正则表达式中的各个符号的含义。

符号含义简介

^:表示字符串的开头,后面紧接着1,表示匹配的字符串要以"1"开头。

1:就是匹配“1”本身,^不匹配字符,所以1就是匹配字符串的第一个字符。

[358]:表示可以匹配3、5、8中的任何一个,当然,也只能匹配一个字符;[abc]整个表达式用来匹配一个字符,这个被匹配字符可以是abc中的任一个。

\d:表示一个数字字符,等同于[0123456789],匹配0123456789中的任何一个数字,[0123456789]也可以写作[0-9]

{9}:表示前面的\d重复9次,即有9个数字。重复次数可以设定范围值或是最小值,{m,n}表示前面的元素或是表达式最少重复m次,最多重复n次;{m,}表示前面的元素或是表达式最少重复m次,不设定最大重复次数。

$:表示字符串的结尾,它前面的\d{9}数字重复9次后,后面就不能再有字符了。
在这里插入图片描述

如上图所示,13666666666符合正则表达式^1[358]\d{9}$

"13666666666"的第一位数字1,匹配正则表达式中的^1,以数字1开头;第二位数字3匹配表达式中的[358],属于3、5、8中的一个;第三位至第十一位的9个数字,匹配表达式中的\d{9};第十一位数字后不再有字符,匹配表达式$

"13"匹配表达式中的^1[358],不匹配\d{9},后续没有9个数字;"71366666666"不匹配^1,没有以数字1开头;"136666666666"匹配^1[358]\d{9},不匹配$,9个数字后还有数字;"abf"不匹配^1,没有以数字1开头。

匹配一个字符

想要匹配字符串"abc"中的a,正则表达式a即可完成任务。在正则表达式中,可以使用字母或是数字,匹配其本身。正则表达式大小写敏感。
在这里插入图片描述

在正则中,.(英文句点)可以用来匹配任意字符(换行符除外),包括它自己。
在这里插入图片描述

匹配一组字符中的一个

正则表达式[an]表示匹配a或者n,[]中的字符可以理解为是"或"的关系。
在这里插入图片描述
在[]中可以使用区间表达式,例如[0-9]表示匹配0到9的数字,即所有数字;[a-z]表示匹配所有小写英文字母,[A-Z]表示匹配所有大写英文字母,[a-f]表示匹配a-f的所有小写字母。
在这里插入图片描述
有时我们希望不要匹配到某些字符,此时也可以用[]。例如[^abcdef]表示不匹配abcdef中的任何一个,其他字符都可以,有些类似于取反。
在这里插入图片描述
同样的,字符区间一样可以用于取反操作。
在这里插入图片描述
需要注意的是,[]中的^作用范围是整个[]。例如[^a-f0-9]表示不能匹配a-f的小写字母以及0-9的所有数字。
在这里插入图片描述

元字符

之前提到过,.可以匹配所有单个字符(换行符除外),如果只是想匹配".“本身呢?此时只需要在”.“前面加一个转义符”\“即可,即正则表达式\.
在这里插入图片描述
同样的,之前提到的”["、"]“也可以通过加转义符来匹配本身,\[\]。”\"同样可以通过转义来匹配其本身,\\
在这里插入图片描述
其他常用元字符如下:

空白元字符含义
\f换页符
\n换行符
\r回车符
\t制表符(Tab键)
\v垂直制表符
元字符含义
\d任何一个数字字符(等价于[0-9])
\D任何一个非数字字符(等价于[^0-9])
\w任何一个单词字符(数字,大小写字母,下划线)(等价于[0-9a-zA-Z_])
\W任何一个非单词字符(即非数字,非大小写字母,非下划线)(等价于[^0-9a-zA-Z_])
\s任何一个空白字符(等价于[\f\n\r\t\v])
\S任何一个非空白字符(等价于[^\f\n\r\t\v])

重复匹配

之前说的都是匹配一个字符,现在说一下如何重复匹配一个字符。

\d+表示匹配\d一次或多次
在这里插入图片描述
\d*表示匹配\d零次、一次或多次
在这里插入图片描述
\d?表示匹配\d零次或一次
在这里插入图片描述
除了+、*、?可以重复匹配外,还可以使用{}进行更精确的重复匹配次数控制。

\d{3,5}表示\d最少匹配三次,最多匹配五次
在这里插入图片描述
\d{3,}表示\d最少匹配三次,最大匹配次数不做限制
在这里插入图片描述
\d{3}表示\d匹配三次
在这里插入图片描述

位置匹配

\b表示匹配单词边界,也就是一个位置,此位置一边是单词字符(\w代表的内容,即数字,大小写字母,下划线_),另一边不是单词字符。可以看到,字符串"23 word on"共有六个位置属于单词边界。
在这里插入图片描述
^表示匹配字符串开头,字符串"23 word on"只有一个位置匹配成功。"^“用在”[]"中时表示取反,否则是匹配字符串开头。
在这里插入图片描述
$表示匹配字符串结尾,字符串"23 word on"只有一个位置匹配成功。
在这里插入图片描述

总结

本文主要介绍了正则表达式中,匹配一个字符,匹配一组字符中的一个,什么是元字符,如何控制重复匹配,最后学习了几个简单的位置匹配。

下一篇:贪婪、非贪婪与占有模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值