2012-10-22 96 views
1

我在試圖捕捉一組上一個字符串的問題:紅寶石正則表達式:如果匹配子不存在

"type=gist\nYou need to gist this though\nbecause its awesome\nright now\n</code></p>\n\n<script src=\"https://gist.github.com/3931634.js\"> </script>\n\n\n<p><code>Not code</code></p>\n" 

我正則表達式目前看起來是這樣的:

/<code>([\s\S]*)<\/code>/ 

我的目標是在代碼括號之間取得所有內容。不幸的是,它是匹配到第二個結束代碼括號有沒有一種方法來匹配代碼括號內的所有內容,直到第一次出現結束代碼括號?

+2

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Reactormonk

回答

4

默認情況下,正則表達式中的所有重複量詞都是貪婪的(匹配儘可能多的字符)。使* ungreedy,像這樣:

/<code>([\s\S]*?)<\/code>/ 

考慮使用DOM解析器來代替。正則表達式不是解析HTML的正確工具。

+0

別擔心,我只是做這個行使。如果我真的需要解析HTML,我會使用DOM解析器。 –

+0

@JackSlingerland在這種情況下,你應該被原諒;)。 [這裏](http://www.regular-expressions.info/)是一本非常好的關於正則表達式的教程,[本文](http://www.regular-expressions.info/repeat.html)專門適用於你的問題。 –

0

而且我剛剛得知,通過多個零件去,在

String.scan(/<code>(.*?)<\/code>/){ 
    puts $1 
} 

是通過代碼所有出現去一個很不錯的辦法 - 但是,是的,進行正確的解析比較好...