例如,如果我有一个电话号码,并且我想查看最后两位数字中的任何一个是否包含 7。我可以纯粹使用正则表达式来做到这一点,还是必须先将字符串分开?
2 回答
您可以使用正则表达式:
7\d?$
这将在末尾或倒数第二个位置匹配 7。或者,更准确地说,它匹配字符串末尾的 7,可选地后跟另一个数字,该数字转换为最后两个位置之一的 7。
您可以使用环视来匹配字符串的任意索引,我们将使用环视(?<=)
来检查我们是否start of string
在左侧跟随了固定数量的字符。并向前看(?=)
以检查我们是否在右侧有固定数量的字符,然后是end of string
.
从字符串开始的索引:
(?<=^.{N})REGEX
您REGEX
将从第 N 个(从零开始)索引匹配,因此如果您想检查左边的第三个字符是否x
在以下字符串中,12x45
那么您将使用(?<=^.{2})x
where x
is 正则表达式来检查字符是否为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
.