2017-02-01 51 views
0

使用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
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 

告訴我們有開始偏移量的line2匹配。要找到匹配結束的位置,我們可以使用以下任一方法。

第一種方式

(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