【问题标题】:MySQL REGEX a partial word in a wordMySQL REGEX 一个单词中的一个部分单词
【发布时间】:2012-07-24 19:09:49
【问题描述】:

我正在尝试在 MySQL 中使用 REGEX 将一个单词与其他单词进行匹配,但我无法正确匹配。

例如,搜索词 foo 应匹配以下内容(不区分大小写):

foobar
barfoo
foofoo
football
foo-bar
foo_bar

并且不匹配它们之间的空格,例如:

foo bar

我在网上搜索并找到了一些正则表达式,但它们与上述所有选项都不匹配。

这是我目前的模式:

REGEX '[[:<:]]'.$word.'(![:space:])[[:>:]]

【问题讨论】:

    标签: mysql regex


    【解决方案1】:

    我假设您将允许在 foo 之前或之后使用任何非空白字符。

    然后就可以使用了

    '^[^[:space:]]*'.$word.'[^[:space:]]*$'
    

    翻译成 PCRE 正则表达式,其中\S 表示非空格字符,\b 表示单词边界:

    ^\S*foo\S*$
    

    所以这匹配包含foo但不包含任何空格的单词。

    【讨论】:

    • 嗯,这几乎可以工作,它不匹配完​​整的单词'foo',只有当它在像 foobar 这样的单词中。确切的单词 foo 不匹配
    • 您的示例并未表明您想单独匹配foo,而您的反例在foo bar 中有一个完整的单词foo,应该匹配。 ..但这是可能的。如果您能告诉我第一个或第二个正则表达式是否更适合您的需求,将进行编辑。
    • 是的,我的错!抱歉,第二个最适合我!
    • 如何使用这种方法来模式匹配“C# Developer, Developed C++, JavaScript Development”以选择“Develop*”的整个 WORD 变体?我无法让它与最新的 ICU 方法一起使用,并且上面的示例无法正确匹配整个单词。
    猜你喜欢
    • 2020-12-29
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2017-08-05
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多