MySQL正则表达式运算符“也许就在那里”

时间:2015-12-03 08:29:39

标签: mysql regex perl

对不起愚蠢的问题公式,但我不知道怎么说。

所以在perl我有这个正则表达式:

/$string(\?.*?)?$/

例如我有这个字符串:

asdf
asdf?moo=foo
asdf?foo
asdfghjkl
blah
blahblah

现在我正在寻找asdfasdf?moo=fooasdf?foo字符串。

我怎么能在MySQL REGEXP中说这个?

2 个答案:

答案 0 :(得分:2)

请注意,您的/$string(\?.*?)?$//$string(\?.*)?$/完全相同,MySQL支持此功能。这是正确的,因为延迟量词*?匹配任意数量的任何字符,但新行直到字符串的结尾,因此它等于贪心量词*

根据MySQL REGEXP reference支持贪婪*。支持的其他量词:

  • ? - 一次或零次出现
  • + - 一次或多次出现
  • {n,m} - n m 次发生(限制量词)

不要忘记在文字?之前使用两个反斜杠。

答案 1 :(得分:1)

根本不需要正则表达式。以下是等效的,并且可能表现更好,因为它不需要MySQL查询优化器识别正则表达式具有常量前缀:

column = 'asdf' OR column LIKE 'asdf?%'

(LIKE模式中的%字符等同于正则表达式中的.*。)