1

例如,如果我有一个电话号码,并且我想查看最后两位数字中的任何一个是否包含 7。我可以纯粹使用正则表达式来做到这一点,还是必须先将字符串分开?

4

2 回答 2

2

您可以使用正则表达式:

7\d?$

这将在末尾或倒数第二个位置匹配 7。或者,更准确地说,它匹配字符串末尾的 7,可选地后跟另一个数字,该数字转换为最后两个位置之一的 7。

于 2013-03-15T11:18:50.007 回答
0

您可以使用环视来匹配字符串的任意索引,我们将使用环视(?<=)来检查我们是否start of string 在左侧跟随了固定数量的字符。并向前看(?=)以检查我们是否在右侧有固定数量的字符,然后是end of string.

从字符串开始的索引:

(?<=^.{N})REGEX

REGEX将从第 N 个(从零开始)索引匹配,因此如果您想检查左边的第三个字符是否x在以下字符串中,12x45那么您将使用(?<=^.{2})xwhere xis 正则表达式来检查字符是否为x.

使用前瞻你可以从头开始做同样的事情:

REGEX(?=.{N}$)

因此,要检查最后 2 位数字中的任何一个是否为 7,您的正则表达式将是7\d?(?=.{0}$)(这相当于 Joey 提出的。但正如您所看到的,这适用于所有索引(并不是说您应该使用它而不是更简单的索引,它只是一个更通用的正则表达式)。

如果您想检查左侧第三个(从零开始)字符x是否是x(?=.{2}$).

您还可以将两者结合起来检查索引之间,例如,您想检查两端第 3 位之间的所有内容是否是任意数量的x',12xxxxxx21那么您有以下内容:

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


注意:
如果您只想要一个匹配/不匹配的正则表达式,那么您可以不使用环视,但是您将匹配整行而不是仅匹配您在REGEX.

例如:

(?<=^.{2})x*(?=.{2}$)将匹配xxxxxx上面的示例,其中 as^.{2}x*.{2}$将匹配字符串,但它将匹配整个事物 ( 12xxxxxx21) 而不是xxxxxx.

于 2013-03-15T11:47:16.067 回答