2013-03-15 114 views
0

例如具体的指标,如果我有一个电话号码,我想看看如果任的最后两位数字的含有7.我能做到这一点纯粹与正则表达式还是我之间的正则表达式必须首先拆分字符串?是否有可能匹配字符串

+0

一个平凡的正则表达式。 – Will 2013-03-15 11:13:20

+0

您使用哪种语言? – Saju 2013-03-15 11:15:24

回答

2

可以使用一个正则表达式:

7\d?$ 

这将一个7无论是在末端或在第二到最后的位置相匹配。或者,更确切地说,它匹配字符串末尾的7,可选地跟随另一个数字,在最后两个位置之一转换为7。

+0

我会用7 \ d?$ – gislikonrad 2013-03-15 11:20:54

+0

自发布答案以来,正则表达式经历了4次或5次迭代(每次都有功能);-) – Joey 2013-03-15 11:23:04

+0

您能解释为什么需要问号吗? – Walex 2013-03-15 12:11:07

0

你可以使用环视来匹配字符串的任意索引,我们将使用后面的(?<=)来检查我们是否有start of string,后面跟着固定数量的字符。和前瞻性,以(?=)检查,我们有字符固定数量的向右依次end of string。从字符串的开头

指数:

(?<=^.{N})REGEX 

REGEX将匹配从第N(从零开始)指数,所以如果你想检查是否从左侧的3ND字符x在以下字符串12x45那么你可以使用(?<=^.{2})x其中x是检查如果字符是x正则表达式。

使用前瞻,你可以从做到底处于同一起跑线:

REGEX(?=.{N}$) 

所以要检查如果任的最后2位数字是7的正则表达式将是7\d?(?=.{0}$)(这是什么乔伊提出的等价物。但是,正如你所看到的,这对于所有的索引都是适用的(并不是说你应该用这个来代替简单的那个,它只是一个更一般的正则表达式)

如果你想检查第三个(从零开始)左边是x然后不奇怪你会有x(?=.{2}$)

您也可以结合这两个指标之间,例如检查要检查是否在任何一端的第三个数字之间的一切都在12xxxxxx21x的任意号码,然后你,你有以下:

(?<=^.{2})x*(?=.{2}$) 


注:
如果你只是想要一个匹配/不匹配的正则表达式,那么你可以没有查找变通,但随后你会匹配整条生产线,而不是只有你在REGEX指定的内容。

e.g:

(?<=^.{2})x*(?=.{2}$)将匹配xxxxxx对于上面的例子,在那里为^.{2}x*.{2}$将是字符串匹配,但它会匹配整个事情(12xxxxxx21),而不是仅仅xxxxxx