您好我正在建立一个网站,并按名称搜索地名。我需要一个正则表达式来匹配以下情况......
Search = Lon
Matches
Londonderry
Greater London
But no match in
Millon
我试过'^Lon
',但这并没有显示出大伦敦,
我尝试过'Lon
',但这与millon匹配,
我也搞乱了字界,但是不能让它正常工作。 我确定这很简单但是regexp经典很棘手。
答案 0 :(得分:8)
在MySQL中,您可以使用[[:<:]]
和[[:>:]]
在Regexp中标记字边界。
所以这应该在WHERE子句中起作用:
regexp '[[:<:]]Lon'
例如:
select * from articles where lower(title) like '[[:<:]]lon'
注意:你应该听取@ gbn关于性能问题的建议。
答案 1 :(得分:4)
您可以使用LIKE
执行此操作WHERE MyCol LIKE 'Lon%' OR MyCol LIKE '% Lon%'
但是,由于领先的通配符,这不会很好地扩展。正则表达式有同样的问题。
您需要使用带有词干的full text search(目前只有MyISAM for 5.5)用于任何可扩展的内容。
答案 2 :(得分:-2)
使用[[:<:]]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 dosn't support \b
并使用[[:<:]]
代替。