System.Text.RegularExpressions によるHTMLタグの検出 - C#

C#で System.Text.RegularExpressions を利用して正規表現を用いてHTMLのタグを検出するコードを紹介します。

概要

こちらの記事で紹介している正規表現を利用して、System.Text.RegularExpressions でHTMLタグを検出するコードを紹介します。

プログラム

Windows Formアプリケーション (.NET)を作成します。フレームワークは.NET 5を利用しています。

UI

下図のフォームを作成します。ボタンを2つ、複数行のテキストボックスを1つ配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace RegExPractical
{
  public partial class FormHtmlTagSimple : Form
  {
    public FormHtmlTagSimple()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      //HTMLタグを検出
      string input = "てまえてまえ<div><b>HTMLの世界にようこそ、「タグ」です。</b><b>文字列です</b><strong><p>テストてすと</p></strong></div>";

      Regex reg = new Regex("<(\".*?\"|'.*?'|[^'\"])*?>");
      Match match = reg.Match(input);
      while (match.Success == true) {
        textBox_Output.Text += string.Format("Index:{0:d} - タグ:{1}\r\n", match.Index, match.Value);
        match = match.NextMatch();
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      //HTMLタグを検出
      string input = "てまえてまえ<div><b>HTMLの世界にようこそ、「タグ」です。</b><b>文字列です</b><strong><p>テストてすと</p></strong></div>";

      Regex reg = new Regex("<(\"[^\"]*\"|'[^']*'|[^'\">])*>");
      Match match = reg.Match(input);
      while (match.Success == true) {
        textBox_Output.Text += string.Format("Index:{0:d} - タグ:{1}\r\n", match.Index, match.Value);
        match = match.NextMatch();
      }
    }
  }
}

解説

RegexクラスのコンストラクタにHTMLタグを検出する正規表現を与えます。
  Regex reg = new Regex("<(\".*?\"|'.*?'|[^'\"])*?>");

入力文字列に対して正規表現を実行します。
  Match match = reg.Match(input);

入力文字列に正規表現と一致する部分あった場合はテキストボックスに一致した位置と、一致した文字列の値を表示します。
match.NetxMatch() メソッドを呼び出し、マッチした以降の文字列で次に一致す部分があるかを探します。 一致する部分がなくなるまで処理を繰り返します。
  while (match.Success == true) {
    textBox_Output.Text += string.Format("Index:{0:d} - タグ:{1}\r\n", match.Index, match.Value);
    match = match.NextMatch();
  }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[タグ検出1]のボタンをクリックします。入力した文字列のタグの位置と検出されたタグがテキストボックスに表示されます。


[タグ検出2]のボタンをクリックします。正規表現の式は違いますが、HTMLタグの検出は正しくできており、同じ結果が表示されています。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2020-12-29
作成日: 2020-12-29
iPentec all rights reserverd.