トップ回答者
正規表現

質問
-
いつもお世話になります。
Wikiの書式の[[リンク]]みたいなのを一致させる正規表現って、C#ではどう書けばよいですか?
string wikianchor = "[[(?<wiki>.*?)]]";
Regex rewiki = new Regex(wikianchor, RegexOptions.IgnoreCase | RegexOptions.Singleline);
for (Match m = rewiki.Match(text); m.Success; m = m.NextMatch()) { string link = m.Groups["wiki"].Value;
}
と書いたのですが、どうまくヒットしないでいます。
回答
-
正規表現中、[ は文字グループ表現の開始を表す文字クラスに割り当てられています。[abc] なら abc のいずれか1文字にマッチって意味ですね。
ですので、[ を '[' 文字そのものにマッチさせたい場合、エスケープする必要があります。エスケープはその文字の直前に \(バックスラッシュ/半角円記号)を付けることで表現します。ただし、C# では文字列中に \ を使う場合 \\ と記述する必要があるので、結局、検索文字列に \\[ と記述することで、被検索文字列中の [ 文字にマッチさせることが可能になります。
- 回答としてマーク shingo.nomura 2010年8月5日 12:51
すべての返信
-
正規表現中、[ は文字グループ表現の開始を表す文字クラスに割り当てられています。[abc] なら abc のいずれか1文字にマッチって意味ですね。
ですので、[ を '[' 文字そのものにマッチさせたい場合、エスケープする必要があります。エスケープはその文字の直前に \(バックスラッシュ/半角円記号)を付けることで表現します。ただし、C# では文字列中に \ を使う場合 \\ と記述する必要があるので、結局、検索文字列に \\[ と記述することで、被検索文字列中の [ 文字にマッチさせることが可能になります。
- 回答としてマーク shingo.nomura 2010年8月5日 12:51
-
-
逐語的リテラル文字列(@""形式の文字列)を使うと「\」を「\\」とせずに記述できるので
もう少しすっきりすると思います。正規表現用の文字列を扱うときはこれをよく使います。string wikianchor = @"\[\[(?<wiki>.*?)\]\]";