More than 1 year has passed since last update.

例えば

文字列からHTMLタグを除去したいような場合、

"<b>太文字</b>で書かれたタイトルです。<a href="...">リンク</a>はこちら"

ってのを、

"太文字で書かれたタイトルです。リンクはこちら"

で取得したいとします。

パッと思いついた正規表現

そのため、

</?.+>

こういう正規表現でマッチングさせて、空文字でリプレースすればいいかと思いましたが、この正規表現だとマッチング結果が、

<b>太文字</b>で書かれたタイトルです。<a href="...">リンク</a>

のように、最後に出てくる終了タグまでヒットしてしまいます。これは困ります。

最短でマッチングさせる

正規表現のマッチングは、基本的に最長一致という「いくつかのマッチングがあれば、マッチングの文字数が長い方でマッチングする」というルールがあります。

例の場合はその逆で、最短でマッチングさせたいのですが、その場合は、

</?(.*?)>

と指定します(Javaの場合)

あるいは、

</?[^>]*>

のように、>を含まない文字列でマッチングさせると、必ず一番初めに修験する閉じ括弧でマッチングしますので、こちらでもいいです。