我如何计算出正则表达式结束的位置?

时间:2017-02-01 23:35:33

标签: ruby regex string position

使用Ruby 2.4。如果我想找出字符串中出现正则表达式的位置,我可以

2.4.0 :014 > line = "1 a b     c d"
 => "1 a b     c d" 
2.4.0 :015 > string_tokens = ["a", "b", "c", "d"]
 => ["a", "b", "c", "d"] 

2.4.0 :025 > first_pos = line.index( /#{string_tokens.join(" ").gsub(" ", "\s+")}/ )
 => 7

但是如何确定正则表达式在字符串中的结束位置?

1 个答案:

答案 0 :(得分:0)

line = "1 a b     c d"
string_tokens = ["a", "b", "c", "d"]

我相信OP打算如下形成正则表达式。

r = /#{string_tokens.join('\s+')}/
  #=> /a\s+b\s+c\s+d/

然后

line =~ r
  #=> 2

告诉我们从2的偏移line开始匹配。要查找匹配结束的位置,我们可以使用以下任一方法。

第一种方式

(line =~ r) + line[r].size - 1
  #=> 12

作为

line[r]
  #=> "a b     c d" 

第二种方式

这使用Regexp::last_matchMachData#end

line =~ r
  #=> 2

Regexp.last_match.end(0)-1
  #=> 12

LastMatchend(n)返回“紧跟在字符串中匹配数组的第n个元素结尾之后的字符的偏移量”。因此,需要-1