我沿着使用正則表達式從字符串中刪除所有html標籤教程(紅寶石)以下:我不明白,一個正則表達式
product.description.gsub(/<.*?>/,'')
。我不知道如何解釋?
。這是否意味着:「以前至少有一個」?那樣的話,/<.+>/
會不會更加適合?
我沿着使用正則表達式從字符串中刪除所有html標籤教程(紅寶石)以下:我不明白,一個正則表達式
product.description.gsub(/<.*?>/,'')
。我不知道如何解釋?
。這是否意味着:「以前至少有一個」?那樣的話,/<.+>/
會不會更加適合?
在這種情況下,它使*
懶惰。
1*
- 儘可能多地匹配1
s。
1*?
- 儘可能少匹配1
s。
在這裏,當你有<a>text<b>some more text
,<.*>
將匹配<a>text<b>
。然而,
<.*?>
將匹配<a>
和<b>
。
參見:Laziness Instead of Greediness
另一個重要這裏需要注意的是,這個正則表達式可以很容易地在有效的HTML失敗,最好是使用HTML解析器,並讓您的文檔的文本。
量詞如*
默認爲貪婪。這意味着它們儘可能匹配。在他們之後加入?
使他們懶惰,所以他們儘快停止匹配。
默認.*
是greedy這意味着它儘可能匹配。因此,與.*
更換會改變:
This <b>is</b> an <i>example</i>. ^-------------------------^
到
This .
如果您使用問號它使非貪婪量詞後,以便它匹配儘可能少。與.*?
更換工作原理如下:
This <b>is</b> an <i>example</i>. ^-^ ^--^ ^-^ ^--^
變爲:
This is an example.
這是從更普遍使用的?
作爲量詞不同的地方意味着「匹配零個或一個」。
無論哪種方式,如果您的文本是HTML,您應該使用HTML解析器而不是正則表達式。
+1我喜歡你的例子。 – alex 2010-07-23 06:50:53
請注意,HTML屬性可能包含普通的'>'字符。你的正則表達式不考慮這一點。 – Gumbo 2010-07-04 09:30:40
我沿着一個教程,正如你指出的那樣,這個教程使用了一個簡單的方法來解決這個問題。我對這種方式更感興趣?作品。 – 2010-07-04 09:37:34
另請參閱http://stackoverflow.com/questions/3075130/difference-between-and-for-regex/3075532#3075532 - 我用說明性示例詳細說明了這一點。 – polygenelubricants 2010-07-04 11:37:47