我在我的 mySQL 搜索查询中使用了一些正则表达式,它似乎工作正常,除非我在查询中有一个 # 字符。
Regexp 匹配基于单词边界,因为此查询搜索的字段是存储在 SQL 数据库中的完整简历/简历。
例如,这按预期工作并返回正确数量的结果:
SELECT COUNT(*) n FROM candidate c WHERE (c.CV REGEXP '[[:<:]]java[[:>:]]');
然而,这并没有返回 0 个结果,而它应该返回几百个:
SELECT COUNT(*) n FROM candidate c WHERE (c.CV REGEXP '[[:<:]]c#[[:>:]]');
我现在明白了,这是因为我是按词边界匹配的,#不能是词尾。有趣的是,“C++”工作正常。
有没有一种方法可以修改此 REGEXP,使其也适用于像“c#”这样的字符串?
最佳答案
你也许可以使用这样的东西:
SELECT 'c#' REGEXP '(^|[^a-zA-Z0-9_])c#($|[^a-zA-Z0-9_])'
SELECT 'java' REGEXP '(^|[^a-zA-Z0-9_])java($|[^a-zA-Z0-9_])'
在较新的 MySQL 版本 (8.0.4+) 中,它通过 ICU 支持正则表达式,而不是 Henry Spencer 的实现,您可以使用 \w
,它看起来更简洁:
SELECT 'c#' REGEXP '(^|[^\w])c#($|[^\w])'
SELECT 'java' REGEXP '(^|[^\w])java($|[^\w])'
关于php - SQL 搜索字符串中的 # 字符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50643907/