2012-10-22 36 views
2

刪除類的名字,我有「 RECORD_TYPE」紅寶石正則表達式不工作從SQL

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') 

期望的結果是刪除從聲明:

所以它應該是:正則表達式運行

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

後。

我沒有寫這個,它在asf-soap-adapter gem中。有人能告訴我爲什麼它不起作用,以及如何解決?

回答

4

我想應該這樣寫......

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

......作爲問題的代碼不匹配,如果字段名稱包含_(下劃線)符號。我想這就是爲什麼這個代碼是寶石:它可以在某些條件下工作(即與下劃線字段名稱)。

不過,我承認我不明白爲什麼正是這種更換應該做的 - 而不是它應該包括0-9檢查以及(如,例如,'record_id1'場仍然不匹配 - 與替代 - 通過正則表達式中的字符類;您可能必須展開它,如[0-9A-Z_],或者完全用\w替換)。

+0

好的,在你的編輯工作後,謝謝! – Joelio

+2

https://github.com/raygao/asf-soap-adapter/issues/4 – Joelio

+0

@Joelio如果你對這個答案感到滿意,那麼接受它可能是一個好主意。 – oldergod

0

所以你的前後gsubs是一樣的嗎?我不能告訴你爲什麼它不起作用,如果你不告訴我你的預期結果。還用解釋紅寶石正則表達式的幫助檢查出rubular.com

+0

我做了,但編輯的人,我的問題變得令人困惑 – Joelio

+0

@Joelio您可以編輯回來,但如果您描述問題,它會更好。 ) – raina77ow

+0

謝謝,我剛剛增加了清晰度,我的調試打印語句在內聯之前,我認爲這更清楚。 – Joelio