我有一个指定的问题。
我有,例如:Hello little, hello red, sometime and now
。
我需要正则表达式只有在子句同时包含hello
和red
时才会匹配。
我已经完成了一个正则表达式((hello|red).*){2}()*
只有在第一个单词hello
和一个单词red
中才会起作用,但在我的子句中有两个单词hello
和{{ 1}}没有单词regexp
就会工作,错了:(
我需要正则表达式,只有当原因包含单词red
和单词hello
并且不依赖于重复其中一个时才会匹配。
请帮忙。
THX。
答案 0 :(得分:4)
通常,人们会使用positive lookahead assertions来完成此任务,但MySQL的正则表达式引擎不支持它们。
因此,您唯一的选择(如果您想在单个正则表达式中执行此操作)是处理两种变体(hello
之后的red
或hello
之前的red
“手动”:
hello.*red|red.*hello
对于两个“搜索词”,这可能是可以接受的 - 但它不能很好地扩展。
你的正则表达式((hello|red).*){2}()*
有点奇怪;这意味着
( # Start of group:
(hello|red) # Match either hello or red
.* # Match any number of characters
){2} # Match this group twice
()* # Match the empty string any number of times...
所以这也匹配hello foo hello
或red bar red
。
答案 1 :(得分:2)
我不确定它是否能解决您的问题,但这是我的解决方案:
.*(hello.*red|red.*hello).*
以下是它的在线演示,并详细解释了它是如何工作的: http://regex101.com/r/eL3wA0
答案 2 :(得分:0)
这可能取决于你想做什么,但我相信正则表达式对于这项任务来说太过分了。
如何简单:
WHERE col LIKE "%red%"
AND col LIKE "%hello%"