【问题标题】:Got error 'nothing to repeat at offset 1' from regexp从正则表达式中得到错误“在偏移量 1 处没有重复的内容”
【发布时间】:2019-11-09 21:03:42
【问题描述】:

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

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”时,我得到了错误

标签: php mysql regex full-text-search


【解决方案1】:

目标是什么?查看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 的几行。

【讨论】:

  • 谢谢,但我想使用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 不计算。这是什么错字?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多