我使用的是Rails / ActiveRecord / Postgres。以下是我尝试匹配的示例测试字符串 -
:sample_data => "$$352054054640611,1010,2015/02/24,05:20:30,40.28370,-111.65530,1437.1,0,0,0,0,0.0,7,0.9,1010,0.0,12.2,8,1,0,81.3##"
我只想查询第一个逗号后的第一个数字(例如:1010)。在Rails中,我希望做这样的事情。
number = "1010"
Model.where("sample_data ~* ?", "\$\$.*," + number + ",.*")
问题是看起来Postgres不允许我像我希望的那样逃脱两美元的迹象。
修改
当我运行Model.where("sample_data ~* ?", "\$\$.*," + number + ",.*").to_sql
我明白了 -
"SELECT \"Model\".* FROM \"Model\" WHERE (sample_data ~* '$$.*,1010,.*')"
答案 0 :(得分:2)
你的问题的答案是,你需要逃避反斜杠。你想把它们传递给Postgres,但Ruby正在逃避美元。 (它不需要,因为'$'不是Ruby字符串中的特殊字符,但无论如何它都会让你这样做。)
Model.where("sample_data ~* ?", "\\$\\$.*," + number + ",.*").to_sql
您的问题的答案是,您可能根本不需要指定美元。试试这个:
Model.where("sample_data ~* ?", "^[^,]*,#{number}").to_sql
帮助您解释此正则表达式:
^
=行首[^,]
=逗号以外的任何字符*
= 0到很多次这也可以确保您在不是之后的逗号后找不到您的号码。