匹配重复

1、匹配一个或多个字符                   匹配一个字符(或一个字符集合)的多次重复

+ 匹配一个或多个字符(至少一个:不匹配零个字符的情况)

a匹配a本身,a+将匹配一个或多个连续出现的a

[0-9]匹配任意单个数字,[0-9]+匹配一个或多个连续的数字

提示:+是一个元字符,如果需要匹配+本身,就必须使用它的转义序列\+

 

2、匹配零个或多个字符           匹配一个字符(或一个字符集合)重复0次或多次

* 匹配一个或多个字符(零个或多次)

提示:*是一个元字符,如果需要匹配*本身,就必须使用它的转义序列\*

 

3、匹配零个或一个字符

? 只能匹配一个字符(或字符集合)的零次或一次出现,最多不超过一次

提示:?是一个元字符,如果需要匹配?本身,就必须使用它的转义序列\?

https
http

正则表达式:https?

匹配结果

https
http

匹配的重复次数

+和*匹配的字符个数没有上限,无法为它们将匹配的字符个数设定一个最大值

+、*和? 至少匹配0个或一个字符。无法为它们将匹配的字符个数另设定一个最小值

+和* 无法为它们匹配的字符个数设定为一个精确的数字

 

4、为重复匹配次数设定一个精确的值

{n}  前一个字符(或字符集合)必须在原始文本里连续出现n次才算是匹配

#33ffee
#ffffff
#666666
#ff0000
#999

正则表达式 :#[0-9A-Fa-f]{6}

匹配结果
#33ffee
#ffffff
#666666
#ff0000

 

5、为重复匹配次数设定一个区间

{min,max} 为重复匹配次数设定一个最小值和一个最大值

{2,4}一个字符(或字符集合)最少重复2次,最多重复4次

注意:重复次数可以是0,比如{0,3}表示重复次数可以是0、1、2、3次

?可以匹配一个字符(或字符集合)0次或1次。因此从效果上看,等价于{0,1}

 

6、匹配“至少重复多少次”

{n,} 表示一个字符(或字符集合)至少重复n次        只给出一个最小重复次数,但不必给出一个最大值

$496.60
$1299.99
$26.43
$613.42
$7.69
$25
$389.1
$500

正则表达式   \$\d{3,}\.\d{2}
匹配结果如下
$496.60
$1299.99
$613.42

 

7、防止匹配过度

?只能匹配0次或者1次

{n}和{m,n}有一个重复次数的上限

但其他的重复匹配语法在重复次数方面都没有上限值,而这样做有时会导致过度匹配的现象。

this offer is not available to customers living in <B>AK</B> and <b>HI</b>

正则表达式   <[Bb]>.*</[Bb]>

匹配结果
<B>AK</B> and <b>HI</b>

为什么会出现这样,因为*和+都是所谓的“贪婪性”元字符,它们在进行匹配时的行为模式是多多益善而不是适可而止。

它们尽可能地从一段文本的开头一直匹配到这段文本的末尾,而不是从这段文本的开头匹配到第一个匹配时为止。

在不需要这种“贪婪行为”的时候该怎么办?答案是使用这些元字符的“懒惰性”版本,懒惰性元字符的写法很简单,只要给贪婪性元字符加上一个?后缀即可。

           常用的贪婪型元字符和它们的懒惰型版本

贪婪型元字符            懒惰型元字符

*                                                              *?

+                   +?

{n,}                  {n,}

 

this offer is not available to customers living in <B>AK</B> and <b>HI</b>

正则表达式  <[Bb]>.*?</[Bb]>

匹配结果
<B>AK</B>
<b>HI</b>

注意:大多数例子使用的都是“贪婪型”元字符,而我们这么做的出发点是为了让那些示例模式尽可能地简明易懂。在实际工作中,请务必根据具体情况来选用“贪婪型”或“懒惰型”元字符。

posted @ 2017-08-06 07:20  永不止步!  阅读(401)  评论(0编辑  收藏  举报