正则表达式

正则表达式 知识量:10 - 22 - 55

5.1 匹配的数量><

匹配一个或多个字符- 5.1.1 -

\w的含义是匹配任意一个字母数字或下划线字符,但是很多时候,我们并不知道要匹配的字符串究竟包含几个字符,只匹配单个字符显然不能满足要求。这时,我们可以使用几个特殊的元字符实现匹配多个字符的目的。

元字符“+”表示匹配至少一个,即匹配一个或多个,不包括0个。

示例文本,匹配下文中的电子邮箱地址:

The abc@163.com and news.bbc@126.com are my email.
I also use support.aol@com.cn as my favorite email.

正则表达式:

[\w.]+@[\w.]+\.\w+

结果:

MatchPositionLength
abc@163.com411
news.bbc@126.com2016
support.aol@com.cn6218

在以上正则表达式中:

  • [\w.]表示匹配任意一个字母数字下划线和“.”。在字符集合中,“.”是不必进行转义的(转义也是可以的);在字符集合外部,则必须进行转义才能表示“点”的意思。

  • [\w.]+表示匹配至少一个字母数字下划线和“.”。

  • 匹配字符集合中的至少一个,“.”必须放到[]的后面。

匹配零个或多个字符- 5.1.2 -

如果要匹配的字符可以是多个,也可以是零个,那么可以使用元字符“*”。

“*”的用法与“+”完全一致,区别只是“*”允许匹配的字符不出现;“+”则要求匹配的字符至少出现一次。

示例文本,匹配正确的电子邮箱地址:

The .abc@163.com and .news.bbc@126.com are my email.
I also use .support.aol@com.cn as my favorite email.

正则表达式:

\w+[\w.]*@[\w.]+\.\w+

结果:

MatchPositionLength
abc@163.com511
news.bbc@126.com2216
support.aol@com.cn6518

以上文本中,错误的书写了邮箱地址,即邮箱的前面错加了一个“.”,如果使用上节的正则表达式,会将带“.”的地址一同匹配,而合法的邮箱地址是不允许这样的。通过使用元字符“*”修改正则表达式,就可以得到正确的匹配了。

正则表达式中,开头的\w+用于确保邮箱的第一个字符是字母数字或下划线,其后的[\w.]*则表示任意个可有可无的字母数字下划线或“.”。

匹配零个或一个字符- 5.1.3 -

要匹配零个或一个字符应该使用元字符“?”,也就是说匹配的字符要么不出现,要么只出现一次。

示例文本,匹配URL地址:

Please remember http://www.163.com and https://www.baidu.com.

正则表达式:

https?://[\w.]+

结果:

MatchPositionLength
http://www.163.com1618
https://www.baidu.com.3922
?表示其前面的字符出现一次或者一次也不出现。如果要匹配问号本身,就要对其进行转义(\?)。