我正在使用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
答案 0 :(得分:0)
看来你需要匹配一个字符串,该字符串表示必须包含一个数字的冒号分隔的字母数字字符串。
您需要使用
/\A(?=\D*\d)[[:alnum:]]+(?::[[:alnum:]]+)*\z/
请参阅Rubular demo(适用于多行测试字符串)
<强>详情:
\A
- 字符串锚的开始(?=\D*\d)
- 一个正向前瞻((?=...)
)需要一个数字(\d
),而不是一个数字(\D*
)之后的0 +字符[[:alnum:]]+
- 一个或多个字母或数字(?::[[:alnum:]]+)*
- 零个或多个序列:
:
- 冒号[[:alnum:]]+
- 1个或多个字母/数字\z
- 字符串结束。