我正在寻找有关 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/