php - SQL 搜索字符串中的 # 字符问题

标签 php mysql regex

我在我的 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/

相关文章:

php - 表格出现在页脚下方,无法确定在 functions.php 中放置 </table> 的位置

regex - 如何在 sahi 脚本中使用正则表达式?

每页的 PHP 标题、描述和关键字

php - 使用 htaccess 和 php 创建动态子目录

php - MySQL 事务时序

mysql - Mysql中的字符串到日期的转换

python - 需要下划线的否定环视或否定断言的正则表达式

php - 使用div重定向到php脚本

php更改数据库日期值

php - 从多个表中搜索数据