正则表达式匹配不以......开头的字符串,并且不以
问题描述:
结尾我试图找到匹配单词但不以特定字符开始/结尾的正则表达式。正则表达式匹配不以......开头的字符串,并且不以
例子: 搜索词是微型
它应该符合:
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]
字符
运行完美。谢谢。 此外,飞溅与边界的答案很好,但下划线(mini_)不匹配。 如果其他人有同样的问题,并不在乎下划线'[[::<:>:]]'可以在mysql中完成。 – Flash