正则表达式 - 搜索单词的开头

时间:2012-01-31 09:39:00

标签: mysql regex search

您好我正在建立一个网站,并按名称搜索地名。我需要一个正则表达式来匹配以下情况......

Search = Lon

Matches
Londonderry
Greater London

But no match in
Millon

我试过'^Lon',但这并没有显示出大伦敦,

我尝试过'Lon',但这与millon匹配,

我也搞乱了字界,但是不能让它正常工作。 我确定这很简单但是regexp经典很棘手。

3 个答案:

答案 0 :(得分:8)

在MySQL中,您可以使用[[:<:]][[:>:]]在Regexp中标记字边界。

所以这应该在WHERE子句中起作用:

regexp '[[:<:]]Lon'

例如:

select * from articles where lower(title) like '[[:<:]]lon'

MySQL Regexp Manual

注意:你应该听取@ 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并使用[[:<:]]代替。