gpt4 book ai didi

ruby-on-rails - Rails、ActiveRecord、PostgreSQL 使用正则表达式在字符串中搜索单词

转载 作者:行者123 更新时间:2023-11-29 11:34:24 27 4
gpt4 key购买 nike

我有一个使用 PostgreSQL 作为数据库的 Rails 4.1.x 应用程序。

我需要查询列以尝试对字符串的一部分进行区分大小写的匹配,同时搜索单词的边界。正则表达式应与/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 will be interpreted as a backspace in a PostgreSQL regex :

Table 9-15. Regular Expression Character-entry Escapes
[...]
\b backspace, as in C

如果你要匹配一个词的结尾,then you want \M :

Table 9-17. Regular Expression Constraint Escapes
[...]
\M matches only at the end of a word

每个人的正则表达式语法都有点不同,您必须对每个引擎使用正确的语法。

我认为您正在寻找:

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

关于ruby-on-rails - Rails、ActiveRecord、PostgreSQL 使用正则表达式在字符串中搜索单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27032537/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com