HTML内の参照画像パスをPHPの正規表現を使って取得しましょう

こんにちは。はじめての投稿です。
今回はPHPの正規表現について少し書こうかな、と思います。

さっそく書いてみます

最近「HTMLファイル内の参照画像パスを一覧化しましょう」なんてことをしてます。
ここでパスとは、例えば「<img src=”./imgs/img_1.jpg”>」の「””」内の記述を指すとします。

フロントエンド側のタグの記述はさまざま想定されますね。

これらから「”./imgs/img_1.jpg”」部分だけを綺麗に取り出す必要があるとします。

以下、PHPの記述。

 上記のうち正規表現はこの部分です。

 具体的に見ていきましょう。

今回の正規表現について

正規表現 概要
 .  改行文字以外の任意の一文字を示します
 *  0回以上の繰り返しを示します
 \s  スペースを示します
 \”  ダブルクォーテーションを示します
 \’  シングルクォーテーションを示します
 |  論理和(OR)を示します
 ?  0回または1回の出現を示します

※詳しくはこの辺をご覧ください。

まずimgタグとsrc属性の間には、スペースや他の属性(alt属性やclass属性)等、何が入ってもおかしくはないため、「.*」と記述してます。これは、「任意の一文字の0回以上の繰り返し」であり、ワイルドカードのような扱いが出来ます。

そして、「=」の前後にはスペースを許します。ここでは「\s*」を記述しています。「スペースの0回以上の繰り返し」ということです。

さらに画像パスを囲う記号はシングル/ダブルクォーテーションどちらもあり得ます。論理和記号である「|」を使って「[\”|\’]」と記述します。

 

重要な画像パスの記述されている部分ですが、「(.*?)」と記述します。ここで「?」を付けることで「任意の位置文字の0回以上の繰り返しであり、0回または1回の出現」ということになります。

HTMLに下記のような記述があったとします。

 このとき上記「(.*?)」を「(.*)」と記述していると、所得するパスは

となってしまうんですね(詳しくはこちらとか)。ですので「0回または1回の出現」を示す「?」を後ろに付けましょう。これによって、「”./imgs/img_1.jpg”」部分だけを取得できます。

 

次回は「パターン修飾子」についてご説明します(゜-゜)

●この記事を書いた人