我有一个表,上面定义了一千多个“关键字”,包括带空格的关键字,比如:
1 | C# Developer
2 | C++
3 | R&D Expert
4 | President/Founder
5 | Kittens
等。
我需要从这个表中匹配一个大的复杂字符串(比如一个段落),以确定文本中是否存在任何关键字。例如,我需要以下的“处理”:
I am a C++ developer and a R&D Expert who loves Kittens!
返回
2 | C++
3 | R&D Expert
5 | Kittens
据我所知,我不能使用match-against,因为即使使用引号,它也不能精确匹配单词和空格(例如,“r&d expert”-会提取包含“expert”的匹配,这是我不想要的),而且我经常需要扫描/匹配动态书写的文本(例如简历中的一段)。
我可以编写循环遍历每个关键字(超过1000个)和扫描文本(有时可能超过500个字符)的代码,但与我可能忽略的内部函数相比,这将是非常缓慢和低效的。
除了循环浏览数据库中的每个关键字并查看它是否存在(完全是逐字逐句地)在一个文本块中之外,还有什么方法来完成我正在尝试做的事情吗?
1条答案
按热度按时间2vuwiymt1#
regexp方法怎么样?假设一个表叫做
keywords
带列kw
,以及变量中的长字符串@longstring
:这假设您要匹配整个单词:
\b
表示单词边界。只有MySQL8.0才支持这个正则表达式。在早期版本中,您可以执行以下操作:当然,如果你对部分匹配满意,
like
足够好了: