MySQL - 选择 * 其中一个子字符串在 char 之前

标签 mysql regex

我有一个字典数据库,其中每个条目都是这样的

column
word; synonym; synonym | example of usage; example of usage

我想做一个选择函数,如果它出现在数据的第一部分(单词和同义词)而不是用法示例中(因为那里有更多单词),它只会获取该行

我一直在尝试用 REGEXP 来做

SELECT * FROM dictionary WHERE column REGEXP '[^\|]*word.*\|.*' 

但出于某种原因,这与表格中的所有内容都匹配 - 即使该词根本没有出现。

我做错了什么?

最佳答案

您需要使用双斜线来转义 MySQL 正则表达式中的特殊字符。因此,您的 \|被视为 |并且您匹配每个字符串中每个“字符”之前的每个空格。

我建议只检查是否 word出现在 | 之前与

'^[^|]*word'

或者 - 如果您需要整个单词检查:

'^[^|]*[[:<:]]word[[:>:]]'

正则表达式匹配...

  • ^ - 字符串开始
  • [^|]* - 除 | 以外的 0 个或多个字符
  • [[:<:]] - 前导词边界
  • word - 字母的字面序列
  • [[:>:]] - 尾随单词边界。

此外,此正则表达式默认不区分大小写。要使其区分大小写,请使用 BINARY关键字。

SELECT * FROM dictionary WHERE column REGEXP BINARY '^[^|]*[[:<:]]word[[:>:]]' 

关于MySQL - 选择 * 其中一个子字符串在 char 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33702725/

相关文章:

mysql - 与两个最大列进行比较得到一行

java - 为什么我的正则表达式匹配但不捕获组?

MYSQL:连接表性能缓慢

php - 如何防止 PHP 中的 SQL 注入(inject)?

javascript - jQuery - 查找并替换子字符串

python - 如何从字符串中提取多次出现的 dict?

MYSQL:使用正则表达式 REGEX 验证输入

编写两个 if 语句的 Pythonic 方式

php - 当数据库出现故障或我想永久断开数据库连接时,如何将用户重定向到 404 页面?

MySQL数据库密码问题