Other

正規表現によるパターン・マッチ

金額

-?\d{1,3}(,\d{3})*(\.\d+)?
  • 0個または1個のマイナス記号
  • 1~3個の数字
  • 0個以上の以下のパターン
    • 1個のカンマ
    • 3個の数字
  • 0個または1個の以下のパターン
    • 1個のピリオド
    • 1個以上の数字

メールアドレス

mailto:プロトコルを紐解くと、何かおかしなことになってしまいます。基本的にメールアドレスは“<ユーザー名>@<ドメイン名>”ではないのでしょうか。

ドメイン名要素は英数字で始まる英数字とアンダースコアとハイフンの組み合わせだろうと思います(多分)。

[\da-z][\w\-]*

トップ・レベル・ドメインは英字で構成されているような気がします。これらがピリオドで連結されるとすれば、ドメイン名は次のとおりです。

([\da-z][\w\-]*\.)+[a-z]+

一方、ユーザー名は各管理ごとに命名規則が異なり、末尾の記号を許していなかったりもしますが、一般的には英数字で始まる英数字とアンダースコアとハイフンとピリオドの組み合わせではないでしょうか。

[\da-z][\w\-\.]*

これをアットマークで連結するとメールアドレスを抜き出せそうです。

[\da-z][\w\-\.]*@([\da-z][\w\-]*\.)+[a-z]+

以下は文中のメールアドレスをリンクに変換するコードのサンプルです。

mail-source

    実行するコマンド
    --------
    function mailToLink() {
        var src = document.getElementById("mail-source");
        var html = src.value.replace(
        /[\da-z][\w\-\.]*@([\da-z][\w\-]*\.)+[a-z]+/gi,
        "<a href=\"mailto:$&\">$&</a>");

        var dst1 = document.getElementById("mail-destination-text");
        dst1.value = html;

        var dst2 = document.getElementById("mail-destination-html");
        dst2.innerHTML = html;
    }
mail-destination-text


mail-destination-html

C#の場合、内部的にUnicodeで動作しているためか、"\d"は全角(マルチバイトコードの場合は「2バイトコードの・・・」と言えるのですが、Unicodeの場合は何と言うのでしょう。)のアラビア数字にもヒットしてしまうので、"[0-9]"と書く必要があります。"\w"も同様に"[0-9a-z_]"とします。

[0-9a-z][0-9a-z_\-\.]*@([0-9a-z][0-9a-z_\-]*\.)+[a-z]+

encoded-word

=\?(\S+?)\?([BQbq])\?((\S*?\?=)+)
$1 ... charset
$2 ... encoding
$3 ... encoded-text + "?="

注意:「$3」にはencoded-wordの終端である「?=」も含まれるので、encoded-textを取り出すには末尾の「?=」を取り除く必要があります。