量词

-- Start

我们已经学会了使用 \d 来匹配数字,如果我要匹配三个数字, 我可以写成 \d\d\d, 那如果我要匹配三十个数字,是不是要写三十个 \d 呢? 呵呵, 当然不用。试一试下面的表达式吧。

\d{30}

有时候,我们并不能确定有多少个数字,甚至有时候我们连有没有数字也无法确定,该怎么匹配呢?看看下面这个表格吧,我们把这些元字符称为量词(quantifiers).

元字符次数下限次数上限含义
X?1X 可以不出现,也可以只出现一次
X+1X 可以出现无数次,但至少要出现一次
X*X 可以出现无数次,也可以不出现
X{n}nnX 精确出现n次
X{n,}nX 可以出现无数次,但至少要出现n次
X{n,m}nmX 至少要出现n次,至多出现m次

我们知道 July 和 Jul 都可以表示七月,我们想在文件中查找这个单词,该怎么办呢?easy, 很显然我们之前做过一个类似的例子,用下面的正则表达式。

July|Jul

事实上,我们还可以这样

July?

看懂了吗? 注意问号修饰的是字母y 。表示 y 可以不出现,也可以只出现一次。更简单点说,y 是可有可无的。怎么样?简单吧。之前我们学习了如何匹配空行,还记得吗? 对了,用下面的表达式:

^$

事实上,这个表达式并不精确,因为空行中可以包括空白字符,当然,也可以没有,所以,正确的应该是:

^\s*$

恭喜你,你又学会了六个元字符。

元字符  名称  匹配对象
.  点号(dot)  单个任意字符
\n  换行(newline)  换行
\r  回车(return)  回车
\t  制表符(Tab)  制表符
[...]  字符组(Character Class)  列出的任意字符
[^...]  排除型字符组(Negated Character Class)  未列出的任意字符
\d 数字(digit) 数字
\D  非数字
\w 单词(word) 单词字符
\W  非单词字符
\s 空白字符(whitespace) 空白字符
\S  非空白字符
^  脱字符(caret)  行的起始位置
$  美元符(dollar)  行的结束位置
\<   单词的起始位置
\>   单词的结束位置
\b  边界(Boundary)  单词边界
\B   非单词边界
(?=...)  肯定顺序环视(Positive Lookahead)  成功如果右边能够匹配
(?!...)  否定顺序环视(Negative Lookahead)  成功如果右边不能够匹配
(?<=...)  肯定逆序环视(Positive Lookbehind)  成功如果左边能够匹配
(?<!...)  否定逆序环视(Negative Lookbehind)  成功如果左边不能够匹配
? 它之前的字符可以不出现,也可以只出现一次
+ 它之前的字符可以出现无数次,但至少要出现一次
* 它之前的字符可以出现无数次,也可以不出现
{n} 它之前的字符精确匹配n次
{n,} 它之前的字符可以出现无数次,但至少要出现n次
{n,m} 它之前的字符至少要出现n次,至多出现m次
|  竖线(bar)  匹配分割两边的任意一个表达式

---更多参见:正则表达式精萃
-- 声 明:转载请注明出处
-- Last Updated on 2012-05-12
-- Written by ShangBo on 2012-04-26
-- End


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值