最清晰的Regex正则表达入门

元字符

代码说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束
  • 例子
    \ba\w*\b匹配以字母a开头的单词——先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)
  • 注意事项
    如果你想查找元字符本身的话,得使用转义符“\”
    例如:deerchao.net匹配deerchao.net,C:\Windows匹配C:\Windows。

限定符

代码说明
*重复0次或多次
+重复1次或多次
重复0次或1次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次
  • 例子
    Windows\d+匹配Windows后面跟1个或更多数字
    ^\w+匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)

字符组

代码说明
[xyz]字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz]负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。
[a-z]字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
[^a-z]负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

分支条件

“|”是分支条件,使用“|”可以把不同的表达式分割,只要匹配到其中任意一个即可,匹配是从左到右匹配的,只要匹配到一个就不往下匹配了。

  • 例子
    众所周知IP地址每一位都不能大于255,在写匹配IP地址的正则表达式时,首先需要解决的是如何匹配0到255之间的数字!

\b(25[0-5]|2[0-4]\d|[1]\d{2}|[1-9]\d?)\b

分组

  • 用小括号来指定的字表达式都叫做分组。然后可以指定这个字表达式的重复次数,或者其他操作。

  • 规则:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

  • 例子
    匹配完整的IP
    \b((25[0-5]|2[0-4]\d|[1]\d{2}|[1-9]\d?).){3}(25[0-5]|2[0-4]\d|[1]\d{2}|[1-9]\d?)\b

反义

代码说明
\W匹配任意不是字母、数字、下划线汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意不是数字的字符
\B匹配不是单词边界的字符
[^x]匹配任意不是x的字符
[^xyz]匹配除了xyz这几个字母外的任意字符
  • 例子
    \S+匹配不包含空白符的字符串。
    <a[^>]+>匹配用尖括号括起来的以a开头的字符串。

贪婪与懒惰

贪婪

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab,而不能匹配到aab,这被称为贪婪匹配。

  • 例子
    aabab匹配aab

懒惰

虽然正则是贪婪的,但有时我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。

  • 例子
    a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)

零宽断言

分类代码/语法说明例子
零宽断言(?=exp)匹配exp前面的位置I like singing and swimming. 中去匹配sing、 swim \b\w(?=ing)*
零宽断言(?<=exp)匹配exp后面的位置swiming and swimming. 中去匹配swim 后面单词 (?<=swim)\w+\b
负向零宽断言(?!exp)匹配后面跟的不是exp的位置匹配三位数字,而且三位数字后面不是数字: 123a 1234 \b\d{3}(?!\d)\w+\b
负向零宽断言(?<!exp)匹配前面不是exp的位置匹配前面不是小写字母的七位数组: s1234567 1234567 \b(?<![a-z])\d{7}\b

查找替换,使用$符号

查找表达式: 第([一二三四五六七八九十百零〇]+|[0-9]+)章(.+)\s
替换为表达式:##第$1章$2\r

常用匹配

  1. 匹配中文: [\x{4e00}-\x{9fa5}]
  2. email: \w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}
  3. 空白行: \s
  4. 网址: <![CDATA[** ^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+ **]]>
  5. 手机国内:0?(13|14|15|18|17)[0-9]{9}
  6. 电话号码国内:[0-9-()()]{7,18}
  7. IP:((25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d).){3}(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)
  8. 身份证:\d{17}[\d|x]|\d{15}

正则表达式工具

正则表达式全集
正则表达式在线匹配网站
正则表达式在线生成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值