对不起愚蠢的问题公式,但我不知道怎么说。
所以在perl
我有这个正则表达式:
/$string(\?.*?)?$/
例如我有这个字符串:
asdf
asdf?moo=foo
asdf?foo
asdfghjkl
blah
blahblah
现在我正在寻找asdf
,asdf?moo=foo
和asdf?foo
字符串。
我怎么能在MySQL REGEXP
中说这个?
答案 0 :(得分:2)
请注意,您的/$string(\?.*?)?$/
与/$string(\?.*)?$/
完全相同,MySQL支持此功能。这是正确的,因为延迟量词*?
匹配任意数量的任何字符,但新行直到字符串的结尾,因此它等于贪心量词*
。
根据MySQL REGEXP reference支持贪婪*
。支持的其他量词:
?
- 一次或零次出现+
- 一次或多次出现{n,m}
- n 到 m 次发生(限制量词)不要忘记在文字?
之前使用两个反斜杠。
答案 1 :(得分:1)
根本不需要正则表达式。以下是等效的,并且可能表现更好,因为它不需要MySQL查询优化器识别正则表达式具有常量前缀:
column = 'asdf' OR column LIKE 'asdf?%'
(LIKE模式中的%
字符等同于正则表达式中的.*
。)