__ *在Mysql正则表达式中

时间:2012-02-08 13:10:46

标签: mysql sql

我指的是一个开源代码。在那里我可以找到一个带有这种过滤器的sql。

select sometext from table1,table2 where table1.sometext LIKE
CONCAT('% ',table2.test_keyword,' %') AND table2.test_keyword NOT
REGEXP '__*';

这个sql中的___ *是什么?

2 个答案:

答案 0 :(得分:5)

__*匹配一个_,后跟零个或多个_ s。

__*
^^^
||\__ (zero or more)     ^
|\___ underscore         |
\____ underscore, then   |

_+会做同样的工作。

_+
^^
|\__ (one or more)       ^
\___ underscore          |

答案 1 :(得分:1)

它只是一个或多个下划线字符。

该模式最好读作:

  • '_',正好是一个下划线,
  • '_*',后跟零或更多下划线。

请记住,没有开始标记,它将匹配字符串中任何位置的模式,因此它基本上意味着任何带有下划线的字符串(或者,更确切地说,因为你正在使用NOT,字符串没有下划线。)

它也是不必要的复杂,因为你可以用AND table2.test_keyword NOT REGEXP '_'达到同样的效果。

有关正则表达式的最新MySQL文档,请参阅here(本答复时为5.6)。