2

私は持っています:

BEFORE Gsub sql :::: 

    SELECT record_type.* FROM record_type WHERE (name = 'Registrars')


    sql = sql.gsub(/SELECT\s+[^\(][A-Z]+\./mi,"SELECT ")


AFTER GSUB SQL :::: 

    SELECT record_type.* FROM record_type WHERE (name = 'Registrars')

望ましい結果は、「record_type」を削除することです。ステートメントから:

だからそれはする必要があります:

    SELECT * FROM record_type WHERE (name = 'Registrars')

正規表現が実行された後。

私はこれを書きませんでした、それはasf-soap-adaptorgemにあります。なぜそれが機能しないのか、そしてどのように修正するのか誰かに教えてもらえますか?

4

2 に答える 2

4

このように書くべきだと思います...

sql = sql.gsub(/SELECT\s+[^\(][A-Z_]+\./mi,"SELECT ")

_...フィールド名に(アンダースコア)記号が含まれていると、質問のコードが一致しないためです。これが、このコードが gem になっている理由だと思います。これはいくつかの条件 (つまり、アンダースコアのないフィールド名) で機能する可能性があります。

それでも、なぜこの置換を正確に行う必要があるのか​​ 理解できないことを認めます-0-9チェックも含めるべきではありません(たとえば、'record_id1'フィールドはまだ一致せず、通常の文字クラスによって置き換えられません)式; のよう[0-9A-Z_]に展開するか、完全に に置き換える必要がある場合があります\w)。

于 2012-10-22T20:53:38.333 に答える
0

あなたの前後のgsubは同じですか?期待される結果を教えてくれなければ、なぜうまくいかないのかわかりません。また、Ruby の正規表現の解釈については、rubular.com を参照してください。

于 2012-10-22T20:50:45.033 に答える