从正则表达式中得到错误“在偏移量 1 处没有重复的内容”

Posted

技术标签:

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

我使用phpmysql数据库发送和接收数据 我的查询是

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 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 不计算。这是什么错字?

以上是关于从正则表达式中得到错误“在偏移量 1 处没有重复的内容”的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中创建正则表达式 [关闭]

正则表达式 - 从字符串中仅获取十进制数

使用正则表达式从字符串中提取数字和符号

为啥我没有得到正则表达式组值

用Python正则表达式从一个匹配项中打印出2个项目。

使用正则表达式从字幕格式化文本的问题