【问题标题】:Mysql error " repetition-operator operand invalid"Mysql报错“重复运算符操作数无效”
【发布时间】:2019-05-09 00:33:27
【问题描述】:

我遇到了一个我以前从未真正见过的奇怪的 mysql 错误。 这是由类似于下面的查询引起的。 有什么建议吗?

SELECT *
  FROM table
 WHERE col REGEXP '^* MAN *$'  
 LIMIT 100

错误:

#1139 - Got error 'repetition-operator operand invalid' from regexp

-- 更新--

好的,我可以确认以下两种解决方案有效。感谢以下两个答案的帮助:

SELECT *
  FROM table
 WHERE col REGEXP '^(\\*) MAN (\\*)$'  
 LIMIT 100

SELECT *
  FROM table
 WHERE col REGEXP '^[*] MAN [*]$'  
 LIMIT 100

【问题讨论】:

  • 类似的?上面的查询有没有问题?
  • 你要匹配的字符串是什么???
  • ^* 的目的是什么,您的意思是 ^.* 因为第一个对我来说是一个或多个行首
  • @nikhilsugandh 我正在尝试将字符串“* MAN *”匹配为完全匹配但是为了缩短日志故事,我需要使用正则表达式。我需要像“^* MAN *$”这样的东西。但这就是我得到的错误,不管转义

标签: mysql sql


【解决方案1】:

\ 和 * 本身是元字符,这就是为什么 * 后面要跟两个 \ 以便第二个 \ 也不被视为文字而是元字符

这将起作用:

SELECT *
FROM Table1
WHERE column1 RLIKE '(\\*)(man)(\\*)';  

查看链接它现在工作:http://sqlfiddle.com/#!9/e695cf/1/0

【讨论】:

  • 你必须使用转义字符来匹配 * 像这样:WHERE REGEXP_LIKE(col,'^(\*)(MAN){1}(\*)$')
  • 我尝试了“WHERE col REGEXP '^(*)(MAN)(*)$'”,我得到以下错误“从 regexp 得到错误'repetition-operator operand invalid'”
  • 是的,我收到此错误“FUNCTION database.REGEXP_LIKE 不存在”
  • 刚刚得到这个错误:“从正则表达式得到错误'repetition-operator operand invalid'”
  • 我的错。我有空格,但正则表达式中没有空格。有用。谢谢
【解决方案2】:

如果你想匹配'bla bla * MAN *bla bla',这应该可以工作

SELECT *
FROM table
WHERE col REGEXP '[*] MAN [*]' 

如果你想匹配'* MAN *'

SELECT *
FROM table
WHERE col REGEXP '^[*] MAN [*]$' 

或者没有正则表达式

SELECT *
FROM table
WHERE col ='* MAN *' 

【讨论】:

    猜你喜欢
    • 2013-03-10
    • 1970-01-01
    • 2014-07-27
    • 2021-03-18
    • 2015-01-17
    • 2015-01-31
    • 2013-02-27
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多