0

正規表現を使用してSQLストアドプロシージャのテキスト内の特定のキーワードを検出するアプリケーションのレガシーコードに取り組んでいますが、正規表現に関する知識が限られているため、修正できないバグを見つけました。

基本的に、私が現在持っている正規表現は、1つの場合を除いてすべて機能します。

(?<=\n\s*)(?<!with.*[\s\S]*)as

このバージョンのストアドプロシージャで一致するものが返されるはずです。

ALTER PROCEDURE [dbo].[p_obj_name_with_something] 
    @username [nvarchar](100) = null,
    @id [int] = null,
    @mode [int] = 0
AS
/*-------------------------------------------------------------------------

ただし、このバージョンでは使用できませんが、現在は一致が返されます。

ALTER PROCEDURE [dbo].[p_obj_name_with_something] 
    @username [nvarchar](100) = null,
    @id [int] = null,
    @mode [int] = 0
WITH EXECUTE AS CALLER
AS
/*-------------------------------------------------------------------------

ASキーワードの前にキーワードWITHが見つからない場合に一致させたいのですが、ストアドプロシージャの名前またはパラメータ内の単語を許可します。

検出が機能すると思う方法は、キーワードWITHの両側に空白(または改行)がある場合ですが、正規表現の構文を完全に理解することはできません。

助言がありますか?

4

2 に答える 2

0

このサイトをチェックしてください:http:
//www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

次の行に注意してください。

\ sスペース、タブ、フォームフィードなどを含む任意の空白に一致します。「[\ f \ n \ r \ t\v]」と同等です。
[^xyz]負の文字セット。囲まれていない任意の文字に一致します。たとえば、「[^abc]」は「plain」の「p」と一致します。

so .....
[\ s] + [[WITH] | [with] [\ s] + [[^ AS] | [^ as]] *内訳:
[\s]+はどちらかの空白ですside
[[with] | [WITH] [case insensitive check with
[[^ AS] | [^ as]] * ASである限り一致する、または存在しない場合に一致する大文字と小文字を区別しないチェック
これが役立つことを願っています

于 2012-07-27T18:14:59.457 に答える
0

本当の答えではありませんが、これを行う簡単な方法は、ストアドプロシージャにいくつかの命名規則ルールを適用し、ルールに違反する20程度を変更することであることがわかりました。

確かに、これは正規表現が解決策ではない場合です!

于 2012-08-15T09:54:09.150 に答える