【问题标题】:Search a word using regular expression使用正则表达式搜索单词
【发布时间】:2012-03-10 14:58:49
【问题描述】:

如何搜索完全匹配的词,例如如何搜索词“leak”,但搜索结果不应包含“leaked”或“leaks”等词。

JavascriptMySQL 的帮助将不胜感激。

【问题讨论】:

    标签: javascript mysql regex search


    【解决方案1】:

    基本上,您需要寻找单词边界。所以不要想着去寻找leak这个词,而是去寻找$leak#这个词,其中$是一个虚构的字符,在每个词的开头,#是一个虚构的字符在结尾每个单词(不是标准约定,只是在这个例子中假设它)。单词是由分隔的,现在让我们说空格。所以,leakedleaks$leaked#$leaks#。因此,唯一匹配的部分是 $leak 而不是 $leak#

    要在 MySQL 中做到这一点,条件是:

    REGEXP '[[:<:]]leak[[:>:]]';
    

    这里,[[:&lt;:]]开始词的词边界[[:&gt;:]]结束词的词边界

    对于 JavaScript,查询将是:

    /\bleak\b/
    

    这里,序列\b 代表一个词边界(在javascript中,开始词和结束词边界之间没有区别)。它不仅适用于空格,甚至适用于标点符号,例如:

    .leak
    ,leak
    ;leak
    

    将匹配/\bleak\b/,但aleak 不会。 (虽然我不确定 MySQL)

    【讨论】:

    • $* 单词的开头? AFAIK *$ 用于字符串结尾。 \b 用于单词边界。
    • 我把它作为一个插图,完全与语言无关,但是,是的,我知道这会导致混乱:)
    • 就 m0skit0s 的建议写了免责声明。感谢您指出这一点。
    • MySQL 文档说 [[:<:> 是单词边界,所以我将其视为 \b 等效项。
    【解决方案2】:

    正则表达式是

    /\bleak\b/
    

    在 JavaScript 中的使用

    var patt1=/\bleak\b/i;
    patt1.test(your_string); // Returns true/false
    

    对于 MySQL(I didn't know it had support for regexes,感谢 Rohan Prabhu):

    expr REGEXP [[:<:]]leak[[:>:]]
    

    【讨论】:

      【解决方案3】:

      这将匹配不以泄漏*开头的单词

      (?!leak\w*)\b\w+\b
      

      粗体匹配:

      • notleaked 泄漏 泄漏 泄漏

      【讨论】:

        【解决方案4】:
        \bleak\b
        

        我已经在以下输入上对其进行了测试:

        1. 泄漏或泄漏。 “泄漏”等。
        2. 泄漏,你好
        3. 查找:泄漏你好
        4. 你好世界!泄漏

        【讨论】:

          猜你喜欢
          • 2020-01-25
          • 2011-10-13
          • 1970-01-01
          • 2015-03-16
          • 2012-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多