![](/img/trans.png)
[英]How to capture regex first occurence and interpolate into string with postgreSQL
[英]How to treat part of a regex as a literal string on postgresql?
我有一段這樣的代碼:
Foo.where("name ~* '.*#{string}.*'")
在字符串中同時包含單詞字符和非單詞字符的情況下,如果其中某些字符未轉義,則會出現無效的正則表達式錯誤。
因此,我需要獲取postgreslq以將字符串作為文字, 或者轉義正則表達式使用的元字符。 有沒有一種方法可以代替獲取所有元字符的列表並添加反斜杠?
我已經看過這兩個問題,但沒有一個答案正是我要尋找的:
此處接受的答案會轉義所有非單詞字符。 而且,將其與我的字符串一起使用時,恐怕會有逃脫的非單詞字符的怪異行為。
這里的答案是特定於問題的,不能用於我的情況。
我認為您可以只使用Ruby的Regexp.escape()
來對string
中的在正則表達式中具有特殊含義的字符進行Regexp.escape()
。
例如
> string = 'C++ /?|foo bar baz'
=> "C++ /?|"
> Regexp.escape(string)
=> "C\\+\\+\\ /\\?\\|foo\\ bar\\ baz"
考慮到這一點,你會寫
Foo.where("name ~* '.*#{Regexp.escape(string)}.*'")
注意 :這未經測試。
您可以將string
所有字符簡單地轉換為ASCII或Unicode十六進制數字,並使用\\ xhh或\\ x {hhhh}。 應該易於編碼,並且沒有副作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.