2

正規表現を使用して文字列からすべての html タグを削除するチュートリアル (Ruby) に従っています。

product.description.gsub(/<.*?>/,'').

の解釈の仕方がわかりません?。それは「前の少なくとも1つ」という意味ですか?その場合、/<.+>/もっと適切ではないでしょうか?

4

4 に答える 4

8

この場合、それは*怠惰になります。

1*1-できるだけ多くの に一致します。-できるだけ
1*?少ない s に一致します。1

ここで、 を持っている<a>text<b>some more textと、<.*>が一致し<a>text<b>ます。
<.*?>ただし、 と は一致<a><b>ます。

参照:貪欲ではなく怠惰

ここでのもう 1 つの重要な注意点は、この正規表現は有効な HTML では簡単に失敗する可能性があることです。HTML パーサーを使用してドキュメントのテキストを取得することをお勧めします。

于 2010-07-04T09:27:07.283 に答える
6

デフォルト.*では貪欲で、可能な限り一致することを意味します。したがって.*、交換すると次のように変わります。

これは<b></b><i>例</i>です。
     ^-----------------------------^

これ 。

量指定子の後に疑問符を使用すると、非貪欲になり、可能な限り一致しなくなります。交換すると.*?、次のように機能します。

これは<b></b><i>例</i>です。
     ^-^ ^--^ ^-^ ^--^

なる:

これは一例です。

?これは、「0 または 1 に一致」を意味する量指定子としてのより一般的な使用法とは異なります。

いずれにしても、テキストが HTML の場合は、正規表現の代わりに HTML パーサーを使用する必要があります。

于 2010-07-04T09:30:56.230 に答える
0

これは、正規表現ライブラリーの後で正規表現について見つけた最高の Web サイトです。

http://www.wellho.net/regex/java.html

それが役立つことを願っています!

于 2010-07-04T09:56:03.017 に答える
0

などの量指定子*は、デフォルトで貪欲です。これは、それらが可能な限り一致することを意味します。それらの後に追加する?と、それらが怠惰になるため、できるだけ早く一致を停止します。

于 2010-07-04T09:28:54.873 に答える