The road to C# master trapemiya

C#を中心に、.NETの話題を取り上げます。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  256  : 記事  1  : コメント  10647  : トラックバック  30

ニュース

Since 2005年10月26日

わんくま同盟

わんくま同盟

Microsoft MVP


Visual Developer - Visual C#

記事カテゴリ

書庫

日記カテゴリ

文字列Aがあるとします。この文字列Aに、複数の文字列のうちどれかが含まれているかどうかを調べる方法として、MSDNフォーラムに以下のようなスレッドが立ちました。

文字列に特定の文字列が存在しているかを調べる方法
http://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/1a28ccd0-feb0-49f0-bc60-62debd99a112/

上記のスレッドは、配列を使った検索による方法を題材として進んでいるので、ここでは他の方法として正規表現を使用した方法をご紹介します。

例えば以下のようにすれば、「user unknown」など指定した5つの文字列のうち、どれかを含んでいれば、regex.IsMatch("調査対象の文字列")はtrueを返します。

Regex regex = new Regex(@"user unknown" +
                                   @"|unknown user" +
                                   @"|Unable to deliver to destination domain" +
                                   @"|no mailbox" +
                                   @"|No such user here"
                                   , RegexOptions.IgnoreCase);

if (regex.IsMatch(str))
{
    //見つかった時の処理
       ・
       ・
}
else
{
    //見つからなかった時の処理
       ・
       ・
}

以上は論理和(or。すなわちどれか一つを含んでいる)の例ですが、論理積(and。すなわち全てを含んでいる)の場合は、以下のようにします。

Regex regex = new Regex("^.*" +
                                   "(?=.*user unknown)" +
                                   "(?=.*unknown user)" +
                                   "(?=.*Unable to deliver to destination domainr)" +
                                   "(?=.*no mailbox)" +
                                   "(?=.*No such user here)" +
                                   ".*$"
                                   , RegexOptions.IgnoreCase);
投稿日時 : 2009年4月18日 0:23

コメント

# re: 正規表現を使って、ある文字列にいくつかの特定の文字列が含まれているかを調べる 2009/04/18 14:31 明智重蔵
//Regex regex = new Regex("^.*" +
Regex regex = new Regex("^" +

少しアレンジしてみました :-)

# re: 正規表現を使って、ある文字列にいくつかの特定の文字列が含まれているかを調べる 2009/04/20 0:44 trapemiya
コメントありがとうございます。
確かに行頭の位置さえわかれば良いので^だけで良さそうですね。.*で検索キーワードの前部分をキャプチャする必要もないわけですから。同様の理由で.*$も必要なさそうです。
つまり、以下の方がより良いということですね。

Regex regex = new Regex("(?=.*user unknown)" +
"(?=.*unknown user)" +
"(?=.*Unable to deliver to destination domainr)" +
"(?=.*no mailbox)" +
"(?=.*No such user here)"
, RegexOptions.IgnoreCase);

先読みの考察が足りませんでした。ありがとうございました。


# 正規表現の先読みについて自分なりにまとめてみました。 2009/04/22 13:40 The road to C# master trapemiya
正規表現の先読みについて自分なりにまとめてみました。

# TXhrHyjzkAAw 2021/07/03 3:33 https://amzn.to/365xyVY
Well I definitely enjoyed studying it. This post provided by you is very useful for proper planning.

# re: ?????????????????????????????????????? 2021/07/18 4:03 hydroxychloroquine treats what
used to treat malaria chloro https://chloroquineorigin.com/# hcqs 400

# YDhUNCqAHjVHrxvx 2022/04/19 11:06 johnansaz
http://imrdsoacha.gov.co/silvitra-120mg-qrms

# yaobghqjrsxv 2022/05/22 22:35 ubuaylgm
https://erythromycin1m.com/# erythromycin vs tetracycline

# aralen otc 2022/12/30 16:12 MorrisReaks
hydroxychloroquine online https://www.hydroxychloroquinex.com/#

Post Feedback

タイトル
名前
Url:
コメント