Пиша прост RSS анализатор (знам, че има много вече написани) и се натъкнах на проблем. Да кажем, че имам следната RSS емисия:
<channel>
<title>Sunset Boulevard</title>
<link>http://www.imdb.com/title/tt0043014/</link>
<description>A hack screenwriter writes a screenplay..</description>
<language>English</language>
<item>
<rating>8.6</rating>
</item>
</channel>
Имам метод, който чрез даден таг и подтагове ги извлича в прост хеш. Ето моят "метод":
def extract_text_from_tag(text, tag)
text =~ /<#{tag}.*?>(?<tag_text>.*?)<\/#{tag}>/m ? $~[:tag_text] : ''
end
За да анализирам канала, първо извличам неговия текст и след това, използвайки масив от предварително дефинирани тагове (заглавие, връзка и т.н.), извличам техните данни. Искам обаче регулярният ми израз да съответства само на директни деца на моя етикет.
Например тук, ако предам етикетите „title“, „link“, „description“, „language“ и „rating“, искам да съпоставя всички тях, с изключение на „rating“ (защото е дете на item).
''
, ако заснетият текст изглежда, че съдържа етикет -- например, като използвате втори регулярен израз като този:/<\w+>/
. - person FMc   schedule 14.02.2013