1

C# を使用しており、コードで次の正規表現を使用したいと考えています。

sDatabaseServer\s*=\s*"([^"]*)"

次のようにコードに配置しました。

Regex databaseServer = new Regex(@"sDatabaseServer\s*=\s*"([^"]*)"", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);

文字列引用符内のすべての括弧と引用符をエスケープする必要があることはわかっていますが、何らかの理由で次の方法はまだ機能しません。

作業バージョン:

Regex databaseServer = new Regex(@"sDatabaseServer\s*=\s*""([^""]*)""", RegexOptions.Compiled | RegexOptions.IgnorePatternWhitespace);

C# に正規表現を単なる文字列として表示させる方法はありますか? 私は知っています....簡単な質問...申し訳ありませんが、私はまだC#のアマチュアです...

解決済み: ありがとうございます!

4

3 に答える 3

5

かっこをエスケープしたときに、一歩行き過ぎました。それらを正規表現のメタ文字 (つまり、キャプチャ グループ) にしたい場合は、それらをエスケープしてはなりません。それ以外の場合は、リテラルの括弧に一致します。

したがって、これはおそらくあなたが探しているものです:

@"sDatabaseServer\s*=\s*""([^""]*)"""
于 2012-11-09T19:55:48.070 に答える
1
string regex = "sDatabaseServer\\s*=\\s*\"([^\"]*)\""

最初の試行で、引用符をエスケープするのを忘れました。ただし、文字列リテラルであるため、a でエスケープしても\機能しません。

\2 回目の試行では、引用符をエスケープしましたが、空白トークンに必要な をエスケープしませんでした\s

于 2012-11-09T19:56:37.540 に答える
0

引用符の代わりに \x22 を使用します。

string pattern = @"sDatabaseServer\s*=\s*\x22([^\x22]*)\x22";

しかし

Ignorepattern 空白を使用すると、正規表現パターン (# 記号) または複数行に分割されたパターンでコメントを使用できます。どちらも持っていません。削除する。

あなたが求めるもののより良いパターンは

string pattern =@"(?:sDatabaseServer\s*=\s*\x22)([^\x22]+)(?:\x22)";

(?: ) は一致しますが、キャプチャせず、パーサーのアンカーのように機能します。また、引用符には少なくとも 1 文字あると想定しているため、* の代わりに + を使用します。

于 2012-11-09T20:00:41.473 に答える