下面的方法將做的工作
def substring_between(target, match1, match2)
start_match1 = target.index(match1)
if start_match1 && start_match2 = target.index(match2, start_match1 + match1.length)
start_idx = start_match1 + match1.length
target[start_idx, start_match2 - start_idx]
else
nil
end
end
如果你想創建這個作爲字符串類的實例方法,那麼這應該爲你工作
class String
def substring_between(sub1, sub2)
match1 = self.index(sub1)
if match1 && match2 = self.index(sub2, match1 + sub1.length)
idx = match1 + sub1.length
self[idx, match2 - idx]
else
nil
end
end
end
如果開始或結束標記不存在或順序錯誤,那麼兩個實現都會返回nil。下面的測試腳本和結果表明,它的工作
strings = [
'No tags at all',
'<font End tag before start tag <p>',
'<p>End tag at end <font',
'No start tag <font',
'<p>No end tag',
'<p>aaa <font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p>',
' <p>bbb <font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p>',
'<p>ccc cccc<font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p>'
]
strings.each do |s|
puts "Method Test = #{s} Result: |#{substring_between(s, '<p>', '<font')}|"
puts "String Test = #{s} Result: |#{s.substring_between('<p>', '<font')}|"
end
Method Test = No tags at all Result: ||
String Test = No tags at all Result: ||
Method Test = <font End tag before start tag <p> Result: ||
String Test = <font End tag before start tag <p> Result: ||
Method Test = <p>End tag at end <font Result: |End tag at end |
String Test = <p>End tag at end <font Result: |End tag at end |
Method Test = No start tag <font Result: ||
String Test = No start tag <font Result: ||
Method Test = <p>No end tag Result: ||
String Test = <p>No end tag Result: ||
Method Test = <p>aaa <font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p> Result: |aaa |
String Test = <p>aaa <font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p> Result: |aaa |
Method Test = <p>bbb <font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p> Result: |bbb |
String Test = <p>bbb <font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p> Result: |bbb |
Method Test = <p>ccc cccc<font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p> Result: |ccc cccc|
String Test = <p>ccc cccc<font style="color:red">[email protected]@@EFG^&*))*T*^[][][]</p> Result: |ccc cccc|
您使用的是'font'標籤應該已經很久沒有被埋沒了,使用內聯樣式而不是CSS類,拼錯'style'屬性,都在同一行? – 2010-07-09 12:30:58
我想要做的是從網頁上獲取一些消息。這就是該頁面的內容。 – Freewind 2010-07-09 12:49:06
@Mike,謝謝你的編輯。我的錯別字:) – Freewind 2010-07-09 12:50:50