【问题标题】:A regex to match string that doesnt start with ... and doesnt end with匹配不以 ... 开头且不以结尾的字符串的正则表达式
【发布时间】:2016-07-05 10:56:27
【问题描述】:

我正在尝试查找与单词匹配但不以特定字符开头/结尾的正则表达式。

示例: 搜索词是迷你的

应该匹配:

mini
mini abc
mini-abc (- could be anything else but not [a-zA-Z0-9])
abc mini
abc-mini (- could be anything else but [a-zA-Z0-9])
abc mini abc
abcminiabc-mini (- could be anything else but not [a-zA-Z0-9])
mini-abcminiabc (- could be anything else but not [a-zA-Z0-9])
miniabc-mini (- could be anything else but not [a-zA-Z0-9])
mini-miniabc (- could be anything else but not [a-zA-Z0-9])
abcmin-mini (- could be anything else but not [a-zA-Z0-9])
mini-abcmini (- could be anything else but not [a-zA-Z0-9])

但不是:

miniabc
abcmini
abcminiabc
miniabc abc
abc abcmini
abcminiabc abc
abc abcminiabc

我尝试过这样的事情:

^(.*)([^a-zA-Z0-9]{0,1})MINI([^a-zA-Z0-9]{0,1})(.*)$

但这似乎不起作用,因为这也匹配 'miniabc'、'abcmini'、'abcminiabc',这不是我想要的。

(语言是 PHP,以防它在 MySQL 中是不可能的。)

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:

    您可以在 PHP (PCRE) 中使用基于环视的正则表达式:

    (?<![a-zA-Z0-9])mini(?![a-zA-Z0-9])
    
    • (?![a-zA-Z0-9])负前瞻,它断言下一个位置没有 [a-zA-Z0-9] 字符
    • (?&lt;![a-zA-Z0-9])否定的后视,它断言先前的位置没有 [a-zA-Z0-9] 字符

    More on lookarounds regular expressions

    RegEx Demo

    【讨论】:

    • 完美运行。谢谢你。带有边界的飞溅的答案也很好,但下划线(mini_)不匹配。万一其他人有同样的问题并且不关心下划线[[:&lt;:]]mini[[:&gt;:]]可以在mysql中完成。
    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 2015-04-27
    • 1970-01-01
    • 2016-12-07
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多