1

私は独自の DBCommand のようなラッパーを独自のデータベースに実装しています。これを介して、API と文字列を使用してのみアクセスできます。ぶー

正規表現を介して通常のパラメーターを見つけ、@@IDENTITY フィールド (またはそのようなもの) を選択しないようにしたいと考えています。次に、パラメーター名をそのパラメーターの実際の値などに置き換えNULLます'Some Value'

現在、私は持っています

@\w{1,}

与えられた文字列

INSERT INTO MYTABLE(VALUE1, VALUE2) VALUES (@MyValue1, @MyValue2); SELECT @@IDENTITY

マッチングしてます

@MyValue1
@MyValue2
@IDENTITY

私も試してみましたが、 and (スペースを表すアンダースコア)[^@]@\w{1,}と一致します(@MyValue1_@MyValue2

@@Identity と一致しないようにするにはどうすればよいですか?

4

3 に答える 3

3

一致する文字列を実際に使用する部分式にマークを付けて、paretheseを追加します。[^@](@\w{1,})次に、を使用Match.Groups(1)してその部分のみを取得します。

もう1つの変形は、否定的な後読みアサーションです。文字列の最初に(?<!@)@\w{1,}一致するという追加のボーナスが@nameあります(まあ、それはおそらく起こらないでしょう)。

更新:そしてそれはあなたを助けません'@quoted @string @literals'、それは正当なSQLですが、パラメータではありません

于 2013-01-17T22:47:51.673 に答える
2

これを試してみてください、私はこれがあなたが望むものだと思います。

(?<!@)@\w+
于 2013-01-17T22:47:46.977 に答える
2

後読みを使用して、2で始まらないようにすることができます@

(?<!@)@\w{1,}
于 2013-01-17T22:48:21.687 に答える