重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章给大家分享的是有关正则表达式之如何实现位置匹配的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
为江阳等地区用户提供了全套网页设计制作服务,及江阳网站建设行业解决方案。主营业务为成都网站建设、成都做网站、江阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!具体如下:
一、问题引入
如果想匹配一段文本中的某个单词(暂不考虑多行模式,将在后面介绍),我们可能会像下面这样:
文本:Yesterday is history, tomorrow is a mystery, but today is a gift.
正则表达式:is
结果:Yesterday 【is】 h【is】tory, tomorrow 【is】 a mystery, but today 【is】 a gift.
分析:本来只是要匹配单词is,但把其他单词中包含的is也匹配出来了。要解决这个问题,使用边界界定符,也就是在正则表达式里用一些元字符来表明我们想让匹配操作在什么位置(或边界)发生。
二、单词边界
一种常用的边界是由限定符\b指定的单词边界,\b用来匹配单词的开始和结尾。更确切地说,它是匹配这样一个位置,这个位置位于一个能够用来构成单词的字符(字母、数字、下划线,也就是与\w相匹配的字符)和一个不能用来构成单词的字符(与\W相匹配的字符)之间。来看前面的例子:
文本:Yesterday is history, tomorrow is a mystery, but today is a gift.
正则表达式:\bis\b
结果:Yesterday 【is】 history, tomorrow 【is】 a mystery, but today 【is】 a gift.
分析:在原始文本中,单词is的前后都有一个空格,而这与模式\bis\b匹配(空格是用来分隔单词的字符之一)。而单词history中也包含了is,因为它的前后分别有一个字符h和t,这两个字符都不能与\b匹配。
如果不匹配一个单词边界,则使用\B。如:
文本:Please enter the nine-digit id as it appears on your color - coded pass-key.
正则表达式:\B-\B
结果:Please enter the 【nine-digit】 id as it appears on your color - coded 【pass-key】.
分析:\B-\B将匹配一个前后都不是单词边界的连字符,nine-digit和pass-key中连字符前后都没有空格,所以能够匹配,而color - coded中连字符前后都有空格,所以不能匹配。
三、字符串边界
单词边界可以用来进行与单词有关的位置匹配(单词开头、结束、整个单词等等)。而字符串边界也有着类似的用途,只不过是用来进行与字符串有关的位置匹配(字符串开头、结束、整个字符串等等)。用来定义字符串边界的元字符有两个:一个是用来定义字符串开头的^,另一个是用来定义字符串结尾的$。
比如要检查一个XML文档的合法性,合法的XML文档都以这样形式开头:
文本:
正则表达式:^\s*<\?xml.*?\?>
结果:
分析:^匹配一个字符串的开头位置,所以^\s*将匹配一个字符串的开头位置和随后的零个或多个空白字符,因为标签前面允许有空格、制表符、换行符等空白字符。
$元字符符的用法除了位置上的差异外,与^用法完全一样。比如,检查一个html页面是否以