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-adaptor gem 中。谁能告诉我为什么它不起作用,以及如何解决?

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

所以你之前和之后的gsubs是一样的吗?如果您不告诉我您的预期结果,我无法告诉您为什么它不起作用。还可以查看 rubular.com,以获取解释 ruby​​ 正则表达式的帮助

于 2012-10-22T20:50:45.033 回答