正規表現による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やデータベースの記事なども担当。