1

美化したい SQL コードのファイルがあり、コードの特定の行/部分が文字列かコメントかを区別するのに苦労しています。

私の現在のプロセスは、ファイル全体でパターン/マッチャー検索を実行し、正規表現を含む文字列N?'([']{2}|[^'])*+'(?!')\s*--.*?\n|/\*.*?\*/.

例:

WHERE y = 'STRING'->WHERE y = THIS_IS_A_STRINGそしてstrings[0] = 'STRING'

SELECT x --do not format->SELECT x THIS_IS_A_COMMENTそしてcomments[0] = --do not format

すべてを美化した後、配列からそれぞれの値を検索しTHIS_IS_A_STRINGて復元します。THIS_IS_A_COMMENT

私が直面している問題は、コメントにアポストロフィが含まれている場合、または SQL 文字列にダッシュが 2 つ含まれている場合です。1 つの問題を修正できますが、最初に文字列を保持するかコメントを保持するかによって、別の問題が発生します。

例えば:

--Don't format this'nt format this最初の文字列を保持すると、次の , までずっと一致します'(複数行の文字列を使用できるため)。

反対に、最初にコメントを保持することを選択した場合:

SELECT x FROM y WHERE z = '--THIS_IS_AS_STRING--'を検出し--、次の改行まですべてをコメント配列に格納します。

どんな助けでも大歓迎です。

編集:おそらくSQLパーサーでこれを行う必要があることはわかっていますが、主に正規表現でこれに取り組んでおり、これが仕上げに必要な最後のステップです

4

3 に答える 3

0

私はこのreqexpを作りました:

/^(([^\\'"\-]+|\-[^\\'"\-]|\\.)+|-?'([^\\']+|\\.)+'|-?"([^\\"]+|\\.)+")+\-\-[^\n]+/

SQL コメントのルールを一致させるには

  • --コメント行は、コメント、および行区切りで終わります。
  • コメントの前に:
    • を除く任意の文字\'"-
    • a の-後にいずれも続かない場合\'"-
    • を含む任意の文字が\続く\'"-
    • 奇数の情報がない限り、それら'の間にはありません。'\
    • 奇数の情報がない限り、それら"の間にはありません。"\
    • -ペアはそれらの単一の情報を持つことができますが、 2 つではありません

私は何かを逃しましたか?

于 2013-08-13T16:39:38.047 に答える