量词

-- Start

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

\d{30}

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

元字符 次数下限 次数上限 含义
X? 1 X 可以不出现,也可以只出现一次
X+ 1 X 可以出现无数次,但至少要出现一次
X* X 可以出现无数次,也可以不出现
X{n} n n X 精确出现n次
X{n,} n X 可以出现无数次,但至少要出现n次
X{n,m} n m X 至少要出现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


你可能感兴趣的:(量词)