正規表現によるHTMLタグの検出 - 正規表現

HTMLタグを検出するための正規表現を紹介します。

パターン1

<(".*?"|'.*?'|[^'"])*?>

解説

式の前後の"<" ">" がタグの開始と終了です。正規表現では通常はできるだけ長い文字列に一致する動作ですが、"?"を記述することで、できるだけ少ない文字数で一致する動作になります。
()内のグループは
  • ".*?"
    • 任意の文字列がダブルクォーテーションで囲まれているパターン(できるだけ短い文字列で一致)
  • '.*?'
    • 任意の文字列がシングルクォーテーションで囲まれているパターン(できるだけ短い文字列で一致)
  • [^'"]
    • シングルクォーテーション、ダブルクォーテーション以外の文字
となっており、それらグループが任意の個数含まれるものを検出します。

パターン2

<("[^"]*"|'[^']*'|[^'">])*>

解説

式の前後の"<" ">" がタグの開始と終了です。
()内のグループは
  • "[^"]*"
    • ダブルクォーテーション以外の文字列がダブルクォーテーションで囲まれているパターン
  • '[^']*'
    • シングルクォーテーション以外の文字列がシングルクォーテーションで囲まれているパターン
  • [^'">]
    • シングルクォーテーション、ダブルクォーテーション以外の文字
となっており、それらグループが任意の個数含まれるものを検出します。

補足
正規表現を利用した C# での実装はこちらの記事を参照してください。

参考

荒い表現1

下記の式でも検出可能です。
<.*?>
ただし、タグ内に改行コードが含まれている場合は、検出できません。また、タグ内にタグが記述されている場合も検出できません。

検出できないパターン

<img src="image.png"
 width=200
 height=64>
<img src="image.png" title='<img>タグ' />

荒い表現2

<\/?[^>]*>

解説

上記の正規表現式の"?"文字は、最短パターンでの一致ではなく"/"文字が0個、または1個を示す文字です。
上記の正規表現では、改行されているタグは検出できますが、タグ内にタグが記述されている場合は、うまく検出できません。
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
掲載日: 2016-04-27
iPentec all rights reserverd.