C# 正規表現 大かっこ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
記事: 58
登録日時: 13年前
住所: 大阪府

C# 正規表現 大かっこ

#1

投稿記事 by » 12年前

こんにちは。

現在C#で正規表現を使い、2つの特定の文字列の間にある文字列を取得するプログラムを組んでいます。

コード:

using System.Text.RegularExpressions;

/*--省略--*/

string str = "aaabccccc";      //  元の文字列

Regex reg = new Regex("aaa(?<text>.*?)cc",    //  ここでは「b」がtextに入る
    RegexOptions.IgnoreCase | RegexOptions.Singleline);

string value = "";

for (Match m = reg.Match(str); m.Success; m = m.NextMatch())
{
    value = m.Groups["text"].Value;
    MessageBox.Show(value);    //  出力:b
}

/*--省略--*/
これは普通に動くのですが、


コード:

using System.Text.RegularExpressions;

/*--省略--*/

string str = "aaa[b]";      //  元の文字列

Regex reg = new Regex("aaa[(?<text>.*?)]",    //  ここでは「b」がtextに入るはず
    RegexOptions.IgnoreCase | RegexOptions.Singleline);

string value = "";

for (Match m = reg.Match(str); m.Success; m = m.NextMatch())
{
    value = m.Groups["text"].Value;
    MessageBox.Show(value);
}

/*--省略--*/
こう元の文字列に大かっこが入ると出力してくれません。

これはどういう理由でこうなるのでしょう?
また、解決策はあるのでしょうか?

宜しくお願いします。

アバター
a5ua
記事: 199
登録日時: 13年前

Re: C# 正規表現 大かっこ

#2

投稿記事 by a5ua » 12年前

[はエスケープする必要があります。

コード:

new Regex("aaa\\[(?<text>.*?)\\]", ...
もしくは

コード:

new Regex(@"aaa\[(?<text>.*?)\]", ...
としてはどうでしょうか。

アバター
記事: 58
登録日時: 13年前
住所: 大阪府

Re: C# 正規表現 大かっこ

#3

投稿記事 by » 12年前

返信ありがとうございます。解決いたしました!

大括弧は特殊な文字列だったのですね;

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る