我正在尝试匹配可能代表文档中某个范围的字符串,但却无法弄清楚这些组的一个问题......到目前为止,我有这个:
/(^-?[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
任何指定此方法的方法,只有当某个组具有某个值时才能创建一个组?
答案 0 :(得分:1)
您可以使用:
(^-?[0-9]+)(?:(?:[.]{,2})|([.]{,3}))(-?[0-9]+$)
如果它是三个.
,它只会将结果放在第二组中。
说明:
?:
- 非捕获组。 |
- 或请注意,(?:[.]{,2})
是非捕获的,而([.]{,3})
将捕获该组。