正则表达式8-次数限定

嗯,到了这时候,估计你该有一个疑问了,前面的搜索,貌似一次只能搜到一个字符或者一个单词,比如那个 Call me if you want: 889-45628 的例子,用 \d 倒是可以搜索到电话号码,但是……搜索结果是 8,8,9,4,5,6,2,8 这样的,太矬了吧?就不能一次把整个电话号码提取出来么?

当然可以了,看完本章,你就会了。

表达式

含义

例子

*

0次或多次。

等价于{0,}。

原始字符串:Call me if you want: 889-45628-

正则表达式:\d*-\d*-\d*

搜索结果:889-45628-

解释:\d 搜索数字,*限定该数字出现 0 次或者多次。

+

1 次或多次。

等价于 {1,}。

原始字符串:Call me if you want: 889-45628-

正则表达式:\d+-\d+-\d+

搜索结果:无

解释:咦?为什么搜不到结果呢?因为 + 限定数字必须出现 1 次或者多次,但是原始字符串最一个 – 字符后面没有数字出现,所以不匹配正则表达式,所以就搜不到结果喽~,如果将正则表达式改写成 \d+-\d+- 就可以了。

?

0 次或 1 次。

等价于 {0,1}。

原始字符串:Good morning, fellows.

正则表达式:oo?

搜索结果:参见粗体字

解释:待搜索的字符是一个 o 后面要跟零个或者一个 o,所以 Good 中的 oo,morning 中的 o 以及 fellows 中的 o 都与表达式匹配。

{n}

由数字 n 指定次数

原始字符串:Good morning, fellows

正则表达式:o{2}

搜索结果:参见粗体字

解释:本正则表达式限定了 o 要出现 2 次,所以结果只有 Good 中的 oo 匹配。

{n,}

最少 n 次

原始字符串:Good morning, fellows.

正则表达式:o{1,}

搜索结果:参见粗体字

解释:本表达式指定 o 至少要出现 1 次,所以 Good 中的 oo,morning 中的 o 以及 fellows 中的 o 都与表达式匹配。

{n,m}

最少 n 次,最多 m 次

原始字符串:Good morning, fellows.

正则表达式:o{1,2}

搜索结果:本表达式指定 o 要出现 1 到 2 次,所以 Good 中的 oo,morning 中的 o 以及 fellows 中的 o 都与表达式匹配。

到这里,要提出两个概念了 ---- 贪婪模式 和 懒惰模式。

默认情况下,我们其实都在做 贪婪模式 的搜索,也就是尽可能多地搜索,那么 懒惰模式 呢?和 贪婪模式 相反,懒惰模式 就是要尽可能少地搜索。

要进行懒惰模式的搜索,将上面表格中的每一个表达式后面都加上 ? 符号就可以了,如 *?,+?,??,{n}?,{n,}?, {n,m}?

在懒惰模式下的搜索结果会怎么样呢?还是自己动手试试看吧。

说明:

在这里留两个作业:

  1. 怎样判断用户输入的座机号码或者手机号码格式正确?
  2. 怎样判断用户输入的 IP 地址格式正确?

到此为止,你已经可以摆平一小部分的正则表达式的应用场景了,现在回过头来看“概述”那张的两句正则表达式,你是否能看懂呢?嗯~还差一点点,那个括号是用来干什么的?好的,下一章就来看看括号的作用吧。

转载于:https://www.cnblogs.com/daizhonghai1314/articles/2951572.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值