【发布时间】:2012-03-10 14:58:49
【问题描述】:
如何搜索完全匹配的词,例如如何搜索词“leak”,但搜索结果不应包含“leaked”或“leaks”等词。
Javascript 和 MySQL 的帮助将不胜感激。
【问题讨论】:
标签: javascript mysql regex search
如何搜索完全匹配的词,例如如何搜索词“leak”,但搜索结果不应包含“leaked”或“leaks”等词。
Javascript 和 MySQL 的帮助将不胜感激。
【问题讨论】:
标签: javascript mysql regex search
基本上,您需要寻找单词边界。所以不要想着去寻找leak这个词,而是去寻找$leak#这个词,其中$是一个虚构的字符,在每个词的开头,#是一个虚构的字符在结尾每个单词(不是标准约定,只是在这个例子中假设它)。单词是由分隔的,现在让我们说空格。所以,leaked 和 leaks 是 $leaked# 和 $leaks#。因此,唯一匹配的部分是 $leak 而不是 $leak#。
要在 MySQL 中做到这一点,条件是:
REGEXP '[[:<:]]leak[[:>:]]';
这里,[[:<:]] 是开始词的词边界,[[:>:]] 是结束词的词边界。
对于 JavaScript,查询将是:
/\bleak\b/
这里,序列\b 代表一个词边界(在javascript中,开始词和结束词边界之间没有区别)。它不仅适用于空格,甚至适用于标点符号,例如:
.leak
,leak
;leak
将匹配/\bleak\b/,但aleak 不会。 (虽然我不确定 MySQL)
【讨论】:
正则表达式是
/\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[[:>:]]
【讨论】:
这将匹配不以泄漏*开头的单词
(?!leak\w*)\b\w+\b
粗体匹配:
【讨论】:
\bleak\b
我已经在以下输入上对其进行了测试:
【讨论】: