正则表达式入门教程

1.先来几个案例试试水

先来看看几个常用的案例。

手机号码正则表达式:	/^1[345789][0-9]{9}$/
解释:
最外的/.../是正则的表达式的标志,
^:表示以什么开头,
[]:表示哪些可选项,
{}:表示出现几次,
$:以什么结尾。
手机号案例:以1开头,第2位为[3,4,5,7,8,9]中任一,【第2位为0~9任意一位,循环9次】也就是第3位到第11位为任意数字。

手机号

日期的正则表达式:	/^\d{4}[/-]\d{2}[/-]\d{2}$/
解释:
最外的//是正则的表达式的标志,
^:表示以什么开头,
\d:表示为数字,
{}:表示出现几次,
/-:表示 - ,
$:表示结尾。
日期案例:4位数字-2位数字-2位数字

日期

2.正则表达式语法

修饰符

修饰符与其他语法特殊,字面量方法声名的时候放到/…/后,构造函数声明的时候,作为第二个参数传入。整个正则表达式可以理解为正则表达式规则字符串+修饰符。

(1)g:global

执行一个全局匹配。不加g只匹配第一个。
global

(2)i:ignore case

忽略大小写进行匹配。
i

(3):multiple lines

多行匹配

元字符

( * + ? $ ^ . | \ () {} [] )

原义字符

例如我们要匹配的is 或 别的字符

\ 将下一个字符标记为特殊字符、或一个原义字符、或一个向后引用、或一个进制转义符。例如:【\n】 匹配 一个换行符 【/】匹配一个/ 。

非打印字符

\f 匹配一个换页符。等价于\x0c和\cL。

\n 匹配一个换行符。等价于\x0a和\cJ。

\r 匹配一个换行符。等价于\x0d 和 \cM。

\s 匹配任何空白字符,包括空格、制表符、换页符等。 等价于[ \f\n\r\t\v]。

\S 匹配任何非空白字符。 等价于[ ^ \f\n\r\t\v]。

\t 匹配一个制表符。 等价于 \x09 和 \cl 。

\v 匹配一个垂直制表符。 等价于 \x0b 和 \cK

字符类

[可以表示匹配数字] :[13579] :【任意从13579取一】

[可以表示某些字符]:[//] :【//】

[^ 可以表示取反]:[ ^ 13579]:【任意从02468取一】

[ - ]:[a-zA-Z0-9]:【从a-z,A-Z,0-9中任意取】

预定义类

. :[ ^ \n\r] :除了回车符和换行符之外的所有字符

\d :[0-9]:数字字符

\D :[ ^ 0-9]:非数字字符

\s :[\t\n\x0B\f\r]:空白符

\S :[ ^ \t\n\x0B\f\r]:非空白符

\w:[a-zA-Z_0-9] :单词字符(字母、数字、下划线)

\W:[ ^ a-zA-Z_0-9]:非单词字符

边界

^ :以xx开头。

$ :以xx结尾。

\b:单词边界,指[a-zA-Z_0-9]之外的字符。

\B:非单词边界。

量词

?:出现0次或1次。

*:出现任意次。

+:出现一次或多次(至少一次)。

{n}:对应0次或n次。

{n, m}:至少出现n次到不超过m次。

{n,}:至少出现n次。

{0,n}:至多出现n次。

贪婪与懒惰(非贪婪)

见名思意 贪婪就是尽可能多的匹配,懒惰就是尽可能少的去匹配。

在修饰匹配次数的特殊符号(+、*、{m,n})后再加上一个 “?” 号,就由贪婪模式变成懒惰模式。

贪婪

正则式源字符匹配结果
(J)(\w+)“Jaaaaay Jay Ja”匹配第一个J后的所有元素“Jaaaaay Jay Ja”
(J)(\w+)(J)“Jaaaaay Jay Ja”匹配第一个和最后一个J之间的元素"Jaaaaay Jay J"

懒惰

正则式源字符匹配结果
(J)(\w+?)“Jaaaayzzz Jay”“Ja”
(d)(\w+?)(d)“daadccd”“daad”

3.练习一下

匹配出生日期

出生日期的写法有很多种,例如[1997-04-15]、[1997年4月15日]、[1997/4/15]、[1997-04]等等
如何把这些全部匹配进来呢

line = "xzy出生于1997年4月15日"
line = "xzy出生于1997-04-15"
line = "xzy出生于1997-04"
line = "xzy出生于1997/4/15"
line = "xzy出生于1997年4月"

reg = ".*出生于(\d{4}[年-/]\d{1,2}([月]$|[月-/]\d{1,2}([日]|$)|$))"

强行解释一波
.*就代表任意字符出现任意次数
\d代表数字,{4}代表出现几次,[年/-]表示可选项。 也就是匹配年份
\d{1,2} 表示匹配月份可能是4 也可能是 04,但是有些只到月没有日 有些还有日,所以要再加判断.
[月]$: 这是考虑最后一种情况 只到月份 [1997年4月]
[月-/]\d{1,2}: 这是包含日的情况

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值