如何匹配字符串中数字后面的特定字符

时间:2017-03-21 20:30:55

标签: ruby regex match

我正在使用Ruby 2.4。在正则表达式中,我如何指定我只想匹配一个数字后跟一个特定字符(或另一个数字)的字符串,但是数字后面的任何其他内容都不匹配?也就是说,如果我的特殊字符是“:”,则应匹配:

"1:9"

但这不应该:

"1:9-2"

因为在上面的字符串中,有一个“ - ”的实例,它跟在数字“9”之后。我认为我有正确的正则表达式,但对于上述两种情况,这是正确的:

2.4.0 :001 > ab = "1:3"
 => "1:3"
2.4.0 :002 > ab =~ /\d:\d/
 => 0
2.4.0 :003 > ab = "1:3-4"
 => "1:3-4"
2.4.0 :004 > ab =~ /\d:\d/
 => 0

1 个答案:

答案 0 :(得分:0)

看来你需要匹配一个字符串,该字符串表示必须包含一个数字的冒号分隔的字母数字字符串。

您需要使用

/\A(?=\D*\d)[[:alnum:]]+(?::[[:alnum:]]+)*\z/

请参阅Rubular demo(适用于多行测试字符串)

<强>详情:

  • \A - 字符串锚的开始
  • (?=\D*\d) - 一个正向前瞻((?=...))需要一个数字(\d),而不是一个数字(\D*)之后的0 +字符
  • [[:alnum:]]+ - 一个或多个字母或数字
  • (?::[[:alnum:]]+)* - 零个或多个序列:
    • : - 冒号
    • [[:alnum:]]+ - 1个或多个字母/数字
  • \z - 字符串结束。