DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字列の検索・表示について(正規表現)

環境/言語:[環境:WindowsXP 言語:VB.NET.C#どちらでも]
分類:[.NET]

こんにちは。

初めて質問致します。Tipsの、

[C#]
//using System.Text.RegularExpressions;
//が宣言されているものとする

//正規表現パターンを指定してRegexクラスのインスタンスを作成
//このパターンは CGI RESCUE(http://www.rescue.ne.jp) を
//参考にさせていただきました。
Regex r;
r = new Regex(@"\b[-\w.]+@[-\w.]+\.[-\w]+\b");

//TextBox1.Text内で正規表現と一致する対象を1つ検索
Match m;
m = r.Match(TextBox1.Text);
//次のように一致する対象をすべて検索することもできる
//Dim mc As MatchCollection = r.Matches(TextBox1.Text)
while (m.Success)
{
//一致した対象が見つかったとき
//キャプチャした部分文字列を表示
Console.WriteLine(m.Value);
//次に一致する対象を検索
m = m.NextMatch();
}

の事ですが、複数一致するものがあっても一つしか検索・表示できません。
VBで試しても同じ結果です。もしよろしければご教授願いたいと思います。
Regex reg = new Regex(@"\b[-\w.]+@[-\w.]+\.[-\w]+\b");
string str = "basdg@eafef.jp\r\nfjsiof@hogde.com";
Match m = reg.Match(str);
while (m.Success) {
Console.WriteLine(m.Value);
m = m.NextMatch();
}
普通に二つ見つかりましたが……。
TextBox1.Text を検証する必要があるような気がします。

ところで、.NET の正規表現では \w/\W は Unicode に即した定義に変更されています。たとえば漢字も \w にマッチするようになっているので、そのままでは正しく検索することはできないでしょう。
詳しくは下記を参照してください。
http://msdn2.microsoft.com/ja-jp/library/20bw873z.aspx


> //このパターンは CGI RESCUE(http://www.rescue.ne.jp) を
> //参考にさせていただきました。
どれを参照にしたか分かりません(苦笑)
■No15721に返信(Hongliangさんの記事)
> Regex reg = new Regex(@"\b[-\w.]+@[-\w.]+\.[-\w]+\b");
> string str = "basdg@eafef.jp\r\nfjsiof@hogde.com";
> Match m = reg.Match(str);
> while (m.Success) {
> Console.WriteLine(m.Value);
> m = m.NextMatch();
> }
> 普通に二つ見つかりましたが……。
> TextBox1.Text を検証する必要があるような気がします。


ご返答ありがとうございます。
ですが、試したところ「fjsiof@hogde.com」のみが表示されます。
TextBox1.Textは、「abcdef@ghi.comとjk@abcd.com」というテキスト(テストで)です。


> ところで、.NET の正規表現では \w/\W は Unicode に即した定義に変更されています。たとえば漢字も \w にマッチするようになっているので、そのままでは正しく検索することはできないでしょう。
> 詳しくは下記を参照してください。
> http://msdn2.microsoft.com/ja-jp/library/20bw873z.aspx


ご教授どうもありがとうございます。
参考にさせていただきます。



>>//このパターンは CGI RESCUE(http://www.rescue.ne.jp) を
>>//参考にさせていただきました。
> どれを参照にしたか分かりません(苦笑)

このコードはこのサイトのTipsの抜粋なので何とも言えませんが、たぶん正規表現(メールアドレスの)の事なのかな。
> TextBox1.Textは、「abcdef@ghi.comとjk@abcd.com」というテキスト(テストで)です。

入力した文字がイマイチわからんのですがチェックした文字列は
「abcdef@ghi.comとjk@abcd.com」なの?

\bで認識できる語の区切りに「と」ってあったっけ?

僕が調べた限りではひらがなの「と」は区切りとは認識されなかったけど・・・?
正規表現:\ba\w*\b
テスト文字列:aa@ab@ac-adーae.af。ag,ah、ai&ajとak al am
ヒットした文字列:aa, ab, ac, ad, ae, af, ag, ah, ai, ajとak, al, am

ここからは余談ですが…
引用:大崎 博基(OHZAKI Hiroki)-Perl正規表現雑技-メールアドレスの正規表現
http://www.din.or.jp/~ohzaki/perl.htm#Mail
かっきり一致させたいならこんなになるらしい…

DOBON.NET | プログラミング道 | プログラミング掲示板