从正则表达式中得到错误“在偏移量 1 处没有重复的内容”
Posted
技术标签:
【中文标题】从正则表达式中得到错误“在偏移量 1 处没有重复的内容”【英文标题】:Got error 'nothing to repeat at offset 1' from regexp 【发布时间】:2019-11-09 21:03:42 【问题描述】:SELECT
*
FROM (
SELECT
*
FROM
test
WHERE
MATCH(word) AGAINST('+hello ')
) AS fulltext_scan
WHERE
fulltext_scan.word REGEXP '^hello '
当我搜索英文单词时,它运行良好 但是当我搜索 swedish(ä,ö,å) 单词时,我得到了这个错误
Got error 'nothing to repeat at offset 1' from regexp
我的连接中有array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'")
和header('Content-Type: text/html; charset=utf-8');
当我直接从 phpmyadmin 测试查询时,即使使用瑞典语单词也能正常工作
我想使用AS
进行排序
SELECT pages.*, MATCH (head, body) AGAINST ('some words') AS
AND column REGEXP '^hello ' relevance,
MATCH (head) AGAINST ('some words') AS title_relevance
FROM pages
WHERE MATCH (head, body) AGAINST ('some words')
ORDER BY title_relevance DESC, relevance DESC
先得到 hello
如何在我的 php 页面中解决这个问题?
【问题讨论】:
@WiktorStribiżew 但查询直接在 phpmyadmin 上运行 可能是fulltext_scan.word like 'hello %'
?
@WiktorStribiżew:你什么意思?
你能提供一个带有瑞典字符的示例字符串吗?
当我搜索“hello”时,代码在我的 php 页面中工作,但是当我搜索“ögon”时,我得到了错误
【参考方案1】:
目标是什么?查看word
是否以ögon
开头? 这个任务可以非常有效地完成
WHERE word LIKE 'ögon %';
连同INDEX(word)
,假设它是VARCHAR
,而不是TEXT
。
请提供SHOW CREATE TABLE test
。 CHARACTER SET
可能存在问题。
SELECT HEX(word) ...
有什么用?如果您正确使用 utf8/utf8mb4,它应该显示 C3B6 67 6F 6E
(没有空格)。
除非您使用的是 MySQL 8.0,否则不要期望 REGEXP
正确理解重音字母。
可能不需要额外的SELECT
;干脆做
SELECT ...
WHERE MATCH(word) AGAINST(...)
AND word LIKE ...
MATCH
将首先发生,然后LIKE
将检查MATCHed
的几行。
【讨论】:
谢谢,但我想使用AS
进行排序,如SELECT pages.*, MATCH (head, body) AGAINST ('some words') AS AND column REGEXP '^hello ' relevance, MATCH (head) AGAINST ('some words') AS title_relevance FROM pages WHERE MATCH (head, body) AGAINST ('some words') ORDER BY title_relevance DESC, relevance DESC
以首先获得hello
AS AND
不计算。这是什么错字?以上是关于从正则表达式中得到错误“在偏移量 1 处没有重复的内容”的主要内容,如果未能解决你的问题,请参考以下文章