编写MYSQL REGEXP:贪婪与否定混淆

时间:2012-12-21 15:04:46

标签: mysql regex

我正在寻找有关MYSQL查询的正则表达式的一些帮助。我对表达方式很陌生,并且让自己彻底迷茫。

我的数据库单元格看起来像这样

1314{{Here is some data}}1213{{More data here}}1112{{Data ahoy}}

我正在尝试编写一个表达式,该表达式将尝试匹配数据集,但仅限于括号内年份内的数据。

例如,假设 $ year = 1314 $ term =“ahoy”

使用以下REGEXP:

$year\{\{.* $term.*\}\}

它返回一个匹配 - 因为它匹配1112前缀数据集的最终“}}”。我不希望它这样做,但尽管阅读了这个贪婪/否定的业务,我无法使语法工作。 实现我追求目标的最佳途径是什么?

1 个答案:

答案 0 :(得分:4)

尝试:

$year\{\{[^}]*$term[^}]*\}\}

[^}]*匹配任何不是}的内容,以便在第一次出现}

时停止匹配

.*贪婪,因此它会与最后一次出现匹配,因此.*\}\}与最后一组}}匹配,使其非贪婪您可以使用?之类的.*?\}\}但我更喜欢使用否定。