はじめに
先日、【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>タグ内のもの
おわりに
正規表現はパッと見てもわからない、でも読み解くと必ず分かるのがいいですね。
よく使いそうな正規表現をリスト化しておき、必要に応じて参照出来るようにしておくと作業効率上がりそう。