你好,我正在建一个网站,我正在按名称搜索地名。在以下情况下,我需要一个regexp来匹配。。。。
Search = Lon
Matches
Londonderry
Greater London
But no match in
Millon
我试过"^Lon
",但这不显示大伦敦,
我只试过"Lon
",但这与millon,相匹配
我也在单词边界上搞砸了,但无法正确使用。我确信这很简单,但是regexp是典型的棘手问题。
在MySQL中,您可以使用[[:<:]]
和[[:>:]]
在Regexp中标记单词边界。
所以这应该在WHERE子句中起作用:
regexp '[[:<:]]Lon'
例如:
select * from articles where lower(title) like '[[:<:]]lon'
MySQL Regexp手动
注意:您应该听取@gbn关于性能问题的建议
您可以使用LIKE 来完成此操作
WHERE MyCol LIKE 'Lon%' OR MyCol LIKE '% Lon%'
然而,由于领先的通配符,这不会很好地扩展。Regex也有同样的问题。
对于任何可扩展的内容,您都需要使用带词干的全文搜索(目前只有适用于5.5的MyISAM)。
使用[[:<:]]Lon
。[[:<:]]
匹配MySQL正则表达式中的零宽度字边界。
>
var input = ["Million", "Londonderry", "Greater London"];
for(var i = 0; i < input.length; i++){
console.log(/[[:<:]]lon/i.test(input[i]));
}
> false
> true
> true
编辑
显然MySQL不支持b
,而是使用[[:<:]]
。