使用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
但是如何确定正则表达式在字符串中的结束位置?
答案 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_match和MachData#end。
line =~ r
#=> 2
Regexp.last_match.end(0)-1
#=> 12
LastMatchend(n)
返回“紧跟在字符串中匹配数组的第n个元素结尾之后的字符的偏移量”。因此,需要-1
。