2010-04-24 27 views
0

我不知道是否有一種方式來獲得補償和分隔符,而我分裂的紅寶石analagous到PHP使preg_split的字符串:如何在Ruby中模擬PHP preg_split來捕獲偏移和分隔符?

preg_split("/(|&nbsp;|<|>|\t|\n|\r|;|\.)/i", $html_string, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_OFFSET_CAPTURE); 

我想我可以通過字符遍歷字符串或使用的東西重爲實現這一目標樹梢,但我想用更方便的東西。

回答

1

您可以在Ruby中獲取來自$~偏移,例如:

"foobarbaz".scan(/[oa]+/) { p [$~.begin(0), $~.end(0), $~.to_s] } 

打印

[1, 3, "oo"] 
[4, 5, "a"] 
[7, 8, "a"] 

在此基礎上,你可以寫一個循環產生相同的偏移量爲PHP代碼一樣。

0

感謝這兩個解決方案,非常有助於瞭解這種做法。如果我使用掃描,我必須添加邏輯來獲得匹配之間的東西。使用String#索引的類似數量的行可以實現相同的效果。太糟糕了String#分割並不佔用一塊

def html_split(str) 
    DELIMITERS = /(&nbsp;|[\s<>;.])/i 
    data = [] 
    offset = 0 
    i = str.index(DELIMITERS) 
    while i do 
    if i > 0 
     value = str[0...i] 
     data << [value, offset] 
     offset += i 
    end 
    delimiter = str[i..i] == '&' ? str[i..i+6] : str[i..i] 
    data << [delimiter, offset] 
    offset += delimiter.size 
    str = str[(i + delimiter.size)..-1] 
    i = str.index(DELIMITERS) 
    end 
    data 
end 
相關問題