1

私はほとんど恥ずかしいですが、正規表現を作成しcat dog mouseて SQL where 句のようなものを変更するのに苦労しています:

a.cat=b.cat AND a.dog=b.dog AND a.mouse=b.mouse

s/(\w*)\s?/a.$1=b.$1 AND /

私は得る

a.cat=b.cat AND a.dog=b.dog AND a.mouse=b.mouse AND a.=b. AND

ああ。助けていただければ幸いです。

編集: 2つの連続した正規表現を使用することになりました。SAS マクロでこれが必要であり、コードを簡潔にしたかったので、次のマクロを作成しました。

%Macro rxchange(str,rx1,rx2,rx3,rx4,rx6,rx7,rx8,rx9,rx10);
    %Let rxno=1;
    %Do %While("&&rx&rxno" Ne "");
        %Let str=%SysFunc(PRXChange(%Str(&&rx&rxno), -1, %Str(&str)));        
        %Let rxno=%Eval(&rxno+1);
    %End;
    &str
%Mend;

/* Try this: */
%Put %rxchange(cat dog mouse,s/(\w+)\s?/a.$1=b.$1 /,s/(\s+)/ AND /);

回答してくれたすべての人に感謝します!

4

4 に答える 4

3

最初の問題は、次+の代わりに必要なことです*:

s/(\w+)\s?/a.$1=b.$1 AND /

これにより、 の問題が解決されa.=b.ます。

それでも、あなたはANDあまりにも多くを得るでしょう。これは、最後に '1=1' で解決できます。

ここで、分割、単純な文字列操作、結合ではなく、正規表現を使用してもよろしいですか? この方が分かりやすいと思います。

于 2010-02-01T14:25:48.673 に答える
2

行をスペースで分割s/^(.+)$/a.$1=b.$1/し、実行して(ただし、この単純な状況では正規表現を使用しないでください)、配列を「区切り文字」「」で結合ANDできます。

開始する前に、必ず文字列をトリミングしてください。エンディングスペースが余分な理由ですa.=b.

于 2010-02-01T14:27:09.433 に答える
1

2つの正規表現でその曲に名前を付けることができます!

str = prxchange('s/(\w+)/a.$1=b.$1/', -1, str);
str = prxchange('s/ +/ AND /', -1, str);
于 2010-02-01T14:38:19.173 に答える
1

最初の単語以外のすべてに一致するものと、最初の単語に一致するものです。

C# コード:

string where = "cat dog mouse";
where = Regex.Replace(where, @" (\w+)", " AND a.$1=b.$1");
where = Regex.Replace(where, @"^(\w+)", "a.$1=b.$1");
于 2010-02-01T14:39:25.613 に答える