2010-07-04 30 views
2

我沿着使用正則表達式從字符串中刪除所有html標籤教程(紅寶石)以下:我不明白,一個正則表達式

product.description.gsub(/<.*?>/,'')。我不知道如何解釋?。這是否意味着:「以前至少有一個」?那樣的話,/<.+>/會不會更加適合?

+1

請注意,HTML屬性可能包含普通的'>'字符。你的正則表達式不考慮這一點。 – Gumbo 2010-07-04 09:30:40

+0

我沿着一個教程,正如你指出的那樣,這個教程使用了一個簡單的方法來解決這個問題。我對這種方式更感興趣?作品。 – 2010-07-04 09:37:34

+0

另請參閱http://stackoverflow.com/questions/3075130/difference-between-and-for-regex/3075532#3075532 - 我用說明性示例詳細說明了這一點。 – polygenelubricants 2010-07-04 11:37:47

回答

8

在這種情況下,它使*懶惰。

1* - 儘可能多地匹配1 s。
1*? - 儘可能少匹配1 s。

在這裏,當你有<a>text<b>some more text,<.*>將匹配<a>text<b>。然而,
<.*?>將匹配<a><b>

參見:Laziness Instead of Greediness

另一個重要這裏需要注意的是,這個正則表達式可以很容易地在有效的HTML失敗,最好是使用HTML解析器,並讓您的文檔的文本。

0

量詞如*默認爲貪婪。這意味着它們儘可能匹配。在他們之後加入?使他們懶惰,所以他們儘快停止匹配。

6

默認.*greedy這意味着它儘可能匹配。因此,與.*更換會改變:

 
This <b>is</b> an <i>example</i>. 
    ^-------------------------^ 

 
This . 

如果您使用問號它使非貪婪量詞後,以便它匹配儘可能少。與.*?更換工作原理如下:

 
This <b>is</b> an <i>example</i>. 
    ^-^ ^--^ ^-^  ^--^ 

變爲:

 
This is an example. 

這是從更普遍使用的?作爲量詞不同的地方意味着「匹配零個或一個」。

無論哪種方式,如果您的文本是HTML,您應該使用HTML解析器而不是正則表達式。

+0

+1我喜歡你的例子。 – alex 2010-07-23 06:50:53