LoginSignup
9
3

More than 3 years have passed since last update.

【Ruby】HTMLタグを表す正規表現と`gsub`メソッド内での活用例

Last updated at Posted at 2019-11-14

はじめに

先日、【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タグのことです。:thumbsup:

【活用例】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>タグ内のもの

おわりに

正規表現はパッと見てもわからない、でも読み解くと必ず分かるのがいいですね。:relaxed:

よく使いそうな正規表現をリスト化しておき、必要に応じて参照出来るようにしておくと作業効率上がりそう。:thinking:

参考にさせて頂いたサイト(いつもありがとうございます)

Ruby HTTPClient tutorial

9
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3