从正则表达式中出现错误“在偏移量1处无重复”

时间:2019-06-27 20:02:35

标签: php mysql regex full-text-search

我使用php从mysql数据库发送和接收数据 我的查询是

SELECT 
 *
FROM (

  SELECT 
   *
  FROM
   test
  WHERE
   MATCH(word) AGAINST('+hello ')      
) AS fulltext_scan
WHERE 
 fulltext_scan.word REGEXP '^hello '

当我搜索英文单词时效果很好 但是当我搜索瑞典(ä,ö,å)字词时,出现了此错误

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页面中解决该问题?

1 个答案:

答案 0 :(得分:0)

目标是什么?看看word 是否以 ögon开头? 任务可以非常有效地完成

WHERE word LIKE 'ögon %';

INDEX(word)一起使用,假设它是VARCHAR,而不是TEXT

请提供SHOW CREATE TABLE testCHARACTER 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的几行。