簡體   English   中英

Rails,ActiveRecord,PostgreSQL使用正則表達式在字符串中搜索單詞

[英]Rails, ActiveRecord, PostgreSQL search for word within string using regex

我有一個使用PostgreSQL作為db的rails 4.1.x應用程序。

我需要查詢一個列,嘗試在字符串的一部分上執行incase敏感匹配,同時使用單詞的邊界進行搜索。 正則表達式應與/ keyword \\ b / i內聯,因此使用%keyword%不會削減它。 我知道postgres支持正則表達式,但是我無法使其正常工作。 我目前有以下內容:

Page.where("title ~* 'keyword/\b'").all
generages the following:
SELECT "pages".* FROM "pages"  WHERE (title ~* 'keyword')

這個目前沒有返回任何內容,即使我知道的記錄包含“關鍵字”這個詞,我做錯了什么? 或者更確切地說,我能做些什么才能獲得預期的結果。

Ruby將\\b解釋為退格,因為你在雙引號字符串中使用了\\b 例如,如果你看一下:

"\b".bytes.to_a

你會得到[8] ,這是一個退格角色。 然后某處將某個退格字符解釋為真正的退格鍵,最后在數據庫中輸入keyword (即keyword/最后斜杠退出)。

你不想說/\\b ,你想說\\\\b得到一個反斜杠后跟一個b進入數據庫。 但這仍然無效,因為\\b將被解釋為PostgreSQL正則表達式中的退格

表9-15。 正則表達式字符輸入逃逸
[...]
\\b退格,如C中所示

如果你在一個單詞的末尾匹配, 那么你想要\\M

表9-17。 正則表達式約束逃逸
[...]
\\M僅匹配單詞的結尾

每個人的正則表達式語法都有一點不同,你必須在每個引擎中使用正確的語法。

我想你正在尋找:

Page.where("title ~* 'keyword\\M'")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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