【问题标题】:Regex: match only single characters (MySQL)?正则表达式:仅匹配单个字符(MySQL)?
【发布时间】:2012-11-02 10:22:27
【问题描述】:

我需要一个 POSIX ERE 格式的正则表达式(用于 MySQL)来匹配字符串中的任何单个常设字符(两个空格之间):

"abc d e f ghi" 应该与 "d e f" 匹配

我只有非常基本的正则表达式知识(在 PHP 中),无法让它在 MySQL 中工作......

更新: 请参阅我的其他问题,了解我正在尝试做什么以及我正在使用的功能:

MySQL: how to remove all single characters from a string?

【问题讨论】:

  • abc d e f ghi j k l mno 应该匹配什么? d e fj k ld e f ghi j k l?你确定你不是指原始匹配 def
  • 我要做的是从字符串中删除单个字符...我找到了一个删除与模式匹配的字符的函数,但现在我需要一个匹配的好模式单个字符....
  • 我不明白你的问题。您是否需要使用正则表达式运算符运行 mysql 查询,返回与单个常设字符匹配的所有记录?或者是其他东西? mysql 正则表达式引擎仅用于匹配(并且不捕获匹配的组)

标签: mysql regex posix-ere


【解决方案1】:

" [a-z] " 做你想做的事吗?

【讨论】:

  • 不完全是,当2个单个字符彼此落后时,它似乎不起作用?
  • @Dylan:如果你先用两个空格替换每个空格,它会起作用!
  • 这是一个很好的建议...我现在可以在 Regexbuddy 中使用它,但遗憾的是我为 MySQL 找到的函数似乎不适用于这种模式...
  • “[^a-z][a-z][^a-z]”表示不是字母,字母,不是字母,怎么样?我不能在这里测试它。
  • 再一次,它在 Regexbuddy 中工作,但在我的函数中不起作用......我猜这个函数有一些问题......
【解决方案2】:

一般 posix 方式:/ ([a-z]) /ig 但如果它的 MySQL RLIKE,它将是 ' [a-z] '(至于情况,它取决于列排序规则

【讨论】:

    【解决方案3】:

    你应该使用MySQL word boundaries:

    • [[:<:>:]]

    这些标记代表单词边界。它们匹配开头和 词尾,分别。单词是单词字符的序列 前面或后面没有单词字符。一个字 字符是 alnum 类中的字母数字字符或 下划线 (_)。

    mysql> SELECT 'a word a' REGEXP '[[:<:>:]]'; -> 1 mysql>

    这样您的 MySQL 正则表达式将是 [[:&lt;:]][[:alpha:]][[:&gt;:]]。这将匹配 MySQL 中的任何常设字母字符,正如提问者似乎实际需要的那样。然而, 如果它只是一个由空格包围的非空格字符,则应使用 RegEx [[:&lt;:]][^[:blank:]][[:&gt;:]]

    注意这个词边界语法不在POSIX ERE Standard中,但是很多其他工具都有类似的语法;例如,GNU grep 在其 RE 中使用 '\' 来表示左右单词边界。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-29
      • 2017-07-08
      • 1970-01-01
      • 2011-04-06
      相关资源
      最近更新 更多