【快速参考】正则表达式

简介:
A regular expression is a pattern that the regular expression engine attempts to match in input text @MSDN
通俗的讲,正则表达式就是指符合一定规则的表达式(字符串),用于文本匹配的工具。
一般有两个用途。验证和搜索(替换)。 正则表达式引擎有多种不同的形式。但是大体一样。
元字符:
^ $  \b 匹配位置
. 匹配除了换行符以外的所有字符
\d 数字
\s 匹配任意的空白符,不仅是空格
\w 字母数字下划线汉字
例子:\bhi\b.*\bLucy\b\ 匹配 hi后面不远处跟着一个Lucy
限定符(重复):
* + ? {2} {2,} {2,5}
.*? 匹配任意多个任意字符,尽可能少的(懒惰策略)字符:
[^a-zA-Z],[a-zA-X0-9_]和\w等效(英文)
特殊字符转义为本身:
\. \? \\ \+等等
正斜杠不用转义。
例子:C:\\Windows匹配C:\Windows
deerchao\.net匹配deerchao.net
反义:
\S \D \W  ^
\S+ 匹配不包含空白符的字符串。
<a[^>]+>匹配用尖括号括起来的以a开头的字符串
\Bend\w*\b 匹配 end sends endure lender 中的ends和ender
分支:
|(含义为或) 从左到右顺序匹配,符合条件就结束
例子:匹配中国大陆固话:
(\d{4}-|\d{3}-)?(\d{8}|\d{7}) (\d{4}在 \d{3}前面
分组:
( )(子表达式)
例子:
匹配IPV4地址
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
后向引用用于重复搜索前面某个分组匹配的文本。
\b(\w+)\b\s+\1\b和\b(?<Word>\w+)\b\s+\k<Word>\b匹配重复的单词(比如go go之类的)
小括号的用途:
分类 代码/语法 说明
捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言 (?=exp) 匹配exp前面的位置,exp是后缀,不包含exp
(?<=exp) 匹配exp后面的位置,exp是前缀,不包含exp
(?!exp) 匹配后面跟的不是exp的位置,exp不是后缀,不包含exp
(?<!exp) 匹配前面不是exp的位置,exp不是前缀,不包含exp
注释 (?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
例子:
\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词
(?<=\s)\d+(?=\s)匹配以空白符间隔的数字
2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199) 匹配IP地址(包含注释)
贪婪与懒惰:
当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
?用来懒惰匹配。
例子:
a.*b 搜索abcb的时候匹配abcb,a.*?b 搜索abcb的时候匹配ab.
平衡组和递归匹配:


附注:
常用正则表达式:

非负整数                \d+

正整数                   \d*[1-9]\d* (包含01,不包含00)

整数                     -?\d+

实数                      -?\d+(\.\d+)? 

中文                      [\u4e00-\u9fa5]

不含abc的单词       \b((?!abc)\w)+\b

qq号码                  [1-9]\d{5,11}

中国大陆邮政编码   [1-9]\d{5}

日期(年-月-日)        (\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))

日期(月/日/年)        ((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})

时间(24小时制)       ((1|0?)[0-9]|2[0-3]):([0-5][0-9])

中国大陆固话号码   (0\d{3}-|0\d{2}-)?(\d{7}|\d{8})

网址URL                 [a-zA-z]+://[^\s]*

电子邮件Email         \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

IP地址                    ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

HTML标记             <(\S*?)[^>]*>.*?</\1>|<.*? />


参考资料:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值