簡體   English   中英

如何將正則表達式的一部分視為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM