Sphinx 中奇怪的正则表达式匹配错误

Strange regexp match error in Sphinx

我试图将我数据库中节目的开始时间从各种符号映射到 houram/pm 所以我做了一个 regexp_filter:

regexp_filter = ([0-9]|10|11|12)( a|a)(.)?(m)(.)? =>am

这似乎适用于查询

select  ID,Name from idx_Table WHERE (MATCH('"8am"')) 

但突然间我不断收到

[Err] 1064 - index idx_Table: syntax error, unexpected $end near ''

如果我从查询中删除 " 并执行

select  ID,Name from idx_Table WHERE (MATCH('8am')) 

有效。

如果我将 "am" 更改为 "AM" 并保留引号

select  ID,Name from idx_Table WHERE (MATCH('"8AM"'))

有效 (???) 这很奇怪,因为据我所知 Sphinx 不区分大小写。

最后,如果我注释掉 regex_p 它会起作用。当我正式陷入困境时有什么想法。

更新: 以某种方式思考查询中的 " 引入了错误,然后我删除了它们,但是现在我得到的错误是

[Err] 1064 - 索引 idx_Tabke:语法错误,'/2 附近出现意外的'/'(披露)

所以 regex_p 中的某些内容似乎引入了一个 sphinx 不喜欢的角色?

好吧,末尾的点匹配 'swallows' 'am' 之后的任何字符。因此,在您的情况下, " 是查询中的 'removed' 。如果确实要删除某些内容,请更具体一些,以免匹配 "

此外,sphinx 区分大小写,将 charset_table 设置为不区分大小写很正常。正则表达式也区分大小写,这就是 AM 未被替换的原因。