Regexp-搜索单词的开头



你好,我正在建一个网站,我正在按名称搜索地名。在以下情况下,我需要一个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,而是使用[[:<:]]

最新更新