我正在寻找有关 MYSQL 查询的正则表达式的帮助。我对表达式相当陌生,并且让自己彻底糊涂了。

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

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

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

例如,假设 $year=1314 $term="ahoy"

使用以下 REGEXP:
$year\{\{.* $term.*\}\}

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

最佳答案

尝试:

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

其中 [^}]* 匹配任何不是 } 的内容,因此当它遇到第一次出现 } 时它将停止匹配
.* 是贪婪的,因此它将匹配最后一次出现的可能,因此 .*\}\} 匹配最后一组 }} 以使其不贪婪,您可以使用 ?.*?\}\} 但我更喜欢使用否定。

关于mysql - 编写 MYSQL REGEXP : greedy vs negated confusion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13992425/

10-13 07:13
查看更多