0

C# で、多くのファイルから db に「ハードコードされた」変数の初期化 (カスタム言語から) を解析しようとしていますが、問題があります:

#1 を解析するサンプル コード >>>

ArrayName[ArrayIndexVariable].arrayPropertyNameHex            = $A3

正規表現を使用しようとしています:

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\.arrayPropertyNameHex.+= ?(.+?)$";

ただし、.Success を返します。

matchRegExCriteria.Groups[1].Value.ToString().Length.ToString();

... は0 ですか? ...


解析するサンプル コード #2 >>>

ArrayName[ArrayIndexVariable].arrayPropertyNameInt            = 6942

正規表現を使用しようとしています:

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\.arrayPropertyNameInt.+?(\d+)$";

ただし、これも .Success を返します。

matchRegExCriteria.Groups[1].Value.ToString().Length.ToString();

... は0 ですか? ...

何か案は?

4

1 に答える 1

1

あなたの問題は、正規表現で貪欲な修飾子を使用していることだと思います。あなたの正規表現で(読みやすくするために分割されています):

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\." +
  @"arrayPropertyNameHex.+= ?(.+?)$";

.+afterがありますarrayPropertyNameHex。これは、すべてを「貪欲に」行末まで一致させるため、キャプチャがヒットすることはありません。貪欲ではない一致 ( ) に変更するだけで、+?より適切に機能するはずです。

string strRegExCriteria = @"^sArrayName\[ArrayIndexVariable\]\." +
  @"arrayPropertyNameHex.+?= ?(.+?)$";
于 2012-05-01T00:38:10.477 に答える