[英]Ruby Regex to match multiple portions of a string
使用Ruby:ruby 1.9.3dev(2011-09-23修訂版33323)[i686-linux]
我有以下字符串:
str = 'Message relates to activity <a href="/activities/35">TU4 Sep 5 Activity 1</a> <img src="/images/layout/placeholder.png" width="222" height="149"/><br/><br/>First question from Manager on TU4 Sep 5 Activity 1.'
我要符合以下條件:
35(數字是href屬性值的一部分)
TU4 Sep 5活動(標簽的文本)
經理關於TU4 Sep 5活動1的第一個問題。(最后一個<br/><br/>
標記之后的其余文本)
為了達到相同的目的,我編寫了以下正則表達式
result = str.match(/<a href="\/activities\/(?<activity_id>\d+)">(?<activity_title>.*)<\/a>.*<br\/><br\/>(?<message>.*)/)
這將產生以下結果:
#<MatchData "<a href=\"/activities/35\">TU4 Sep 5 Activity 1</a> <img src=\"/images/layout/placeholder.png\" width=\"222\" height=\"149\"/><br/><br/>First question from Manager on TU4 Sep 5 Activity 1."
activity_id:"35"
activity_title:"TU4 Sep 5 Activity 1"
message:"First question from Manager on TU4 Sep 5 Activity 1.">
但是我想這不是很有效。 是否有可能在匹配結果中僅以某種方式返回了所需的值(如上所述,我要匹配的內容),並且以下值被從匹配結果中排除:
"<a href=\"/activities/35\">TU4 Sep 5 Activity 1</a> <img src=\"/images/layout/placeholder.png\" width=\"222\" height=\"149\"/><br/><br/>First question from Manager on TU4 Sep 5 Activity 1."
謝謝,
吉涅什
適當的方法是不要使用regexen。 而是使用Nokogiri庫輕松解析您的html:
require 'nokogiri'
doc = Nokogiri::HTML.parse(str)
activity_id = doc.css('[href^="/activities"]').attr('href').value[/\d+$/]
activity_title = doc.css('[href^="/activities"]')[0].inner_text
message = doc.search("//text()").last
這將完全執行您的正則表達式所嘗試的操作,而發生隨機失敗的可能性要低得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.