Ruby正则表达式组

时间:2014-04-06 20:55:22

标签: ruby regex

我正在尝试匹配可能代表文档中某个范围的字符串,但却无法弄清楚这些组的一个问题......到目前为止,我有这个:

/(^-?[0-9]+)(\.\.+)(-?[0-9]+$)/

哪个匹配1..10,-20 ... 20,-01234567890 ...- 999999999等。但是,我希望第二组($ 2)只有一个值,如果中间是3位而不是二。所以我希望它像:

=~ -01234567890...-999999999
$1 = -01234567890
$2 = ...
$3 = -999999999

=~ 1..10
$1 = 1
$2 = (empty because only two dots instead of 3)
$3 = 10

任何指定此方法的方法,只有当某个组具有某个值时才能创建一个组?

1 个答案:

答案 0 :(得分:1)

您可以使用:

(^-?[0-9]+)(?:(?:[.]{,2})|([.]{,3}))(-?[0-9]+$)

如果它是三个.,它只会将结果放在第二组中。

说明:

  • ?: - 非捕获组。
  • | - 或

请注意,(?:[.]{,2})是非捕获的,而([.]{,3})将捕获该组。