はじめに
先日、【Ruby】HTTPClientとLINE Notifyを使ってターミナルから文字列を送るプログラムという記事を書きました。
その中で使用しているHTTPClientの学習中に<div>や</div>など、HTMLタグを表す正規表現を見て**「便利!」**と感じたためまとめました!
どなたかの参考になれば幸いです。
この記事が役に立つ方
- HTMLタグが邪魔で除去したい
- 正規表現初心者
この記事のメリット
- HTMLタグを表す正規表現を理解し、活用が出来る
- ついでにRubyの
gsubメソッドの使い方が分かる
環境
- シェル:zsh
- Ruby 2.6.3
参考にしたサイト
HTTPClientチュートリアルサイトにて。
get_contentメソッドの使用例の中で見かけました。
以下リンクの「The get_content function」の中に書いてあったものです。
Ruby HTTPClient tutorial(英語)
HTMLタグを表す正規表現
こちらがHTMLタグを表す正規表現です。
%r{</?[^>]+?>}
このコードを順に読み解いていきます。
↓参照したリファレンスはこちら
正規表現 (Ruby 2.6.0)
%r{正規表現を記載}
{}内は/などをエスケープして記述する必要がない。
HTMLタグは閉じタグに/が必ず使われているので、通常の/正規表現/というでいちいちエスケープする必要がなくなる%r{}のほうが便利です。
<
そのまま<を表す。
/?
/が1つあるか、ないか。
[^>]
^を付けた文字は除外される。
つまり、>以外の1文字を表します。
[^>]+?
+?は直前に書いたパターンが「1個以上」という意味です。
>以外の文字が1個以上ということですね。
※2019/11/15追記
この記法は**「最小量指定子(reluctant quantifier)」**といい、マッチが成功する、最短の文字列にマッチします。
今回のHTMLタグを表すケースでは[^>]+としても同様の挙動を示します。
@scivola さん、いつもありがとうございます!
(もう一度)%r{</?[^>]+?>}とは
「<から始まって/があってもなくてもよくて、最後の>までの間に>以外の文字がいくつかある」
ということになりますね。
つまり、<任意の文字列>か</任意の文字列>ということ!
まさにHTMLタグのことです。![]()
【活用例】gsubメソッドでHTMLタグを除去する
(何らかのHTML).gsub(%r{</?[^>]+?>},'')
Rubyでgsubメソッドは、文字列の置換をするメソッドです。
上記コードでは
<任意の文字列>か</任意の文字列>を''に置換(削除)
しています。
例えば、HTMLドキュメントからHTMLタグを除去して可読性を向上する際に使えます。(以下参照)
【Before】
<html><head><title>Something.</title></head>
<body>Something.</body>
</html>
【After】
Something. # <title>タグ内のもの
Something. # <body>タグ内のもの
おわりに
正規表現はパッと見てもわからない、でも読み解くと必ず分かるのがいいですね。![]()
よく使いそうな正規表現をリスト化しておき、必要に応じて参照出来るようにしておくと作業効率上がりそう。![]()