正则表达式匹配不以......开头的字符串,并且不以

问题描述:

结尾我试图找到匹配单词但不以特定字符开始/结尾的正则表达式。正则表达式匹配不以......开头的字符串,并且不以

例子: 搜索词是微型

它应该符合:

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(PCRE)环视基于正则表达式:

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

More on lookarounds regular expressions

RegEx Demo

+1

运行完美。谢谢。 此外,飞溅与边界的答案很好,但下划线(mini_)不匹配。 如果其他人有同样的问题,并不在乎下划线'[[::<:>:]]'可以在mysql中完成。 – Flash