加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL街道地址模糊搜索

发布时间:2020-12-11 23:48:29 所属栏目:MySql教程 来源:网络整理
导读:有没有人知道在MySQL数据库上进行模糊街道地址搜索的好脚本(或好策略)?关键问题是: 大写(简单 只需使用LCASE) 标点符号(可以使用REPLACE;不确定它是否有更高效的选项) 缩写(这是艰难的 street = st等) 我希望能够匹配: 123 Main st,B单元= 123 Main Stree

有没有人知道在MySQL数据库上进行模糊街道地址搜索的好脚本(或好策略)?关键问题是:

>大写(简单 – 只需使用LCASE)
>标点符号(可以使用REPLACE;不确定它是否有更高效的选项)
>缩写(这是艰难的 – street = st等)

我希望能够匹配:
123 Main st,B单元= 123 Main Street Unit b 最佳答案 虽然它并不完美且速度很慢,但您还是希望通过REGEXP()使用正则表达式.

这是第一遍正则表达式,以匹配大多数情况(以及您的示例):

(?isx)                  # search across multiple lines and ignore case
(                       # full match
  (                       # st number - what about number words like one or two?
    d+
  )
  s+                     # whitespace
  (                       # street name (one or more words)
    [a-z]+
    (?:
      s+
      [a-z]+
    )*
  )
  s+                     # whitespace
  (                       # street type
    al(?:y.?|ley)          # aly,aly. or alley
  |
    ave(?:.|nue)?          # ave,ave.,or avenue
  |
    b(?lvd.?|oulevard)     # blvd,blvd. or boulevard
  |
    c(?:t.?|ourt)          # ct,ct. or court
  |
    cir(?:c.?|cle)?       # cir,circ,circ. or circle
  |
    cres(?:.|cent)?        # cres,cres. or crescent
  |
    dr(?:.|ive)?           # dr,dr. or drive
  |
    exp(?:y.?|ressway)     # expy,expy. or expressway
  |
    f(?:wy.?|reeway)       # fwy,fwy. or freeway
  |
    g(?:rdns.?|ardens)     # grdns,grdns. or gardens
  |
    h(?:wy.?|ighway)       # hwy,hwy. or highway
  |
    l(?n.?|ane)            # ln,ln. or land
  |
    m(?:nr.?|anor)         # mnr,mnr. or manor
  |
    m(?:trwy.?|otorway)    # mtrwy,wtrwy. or motorway
  |
    pl(?:.|ace)?           # pl,pl. or place
  |
    r(?:d.?|oad)           # rd,rd. or road
  |
    st(?:.|reet)?          # st,st. or street
  |
    t(?:pk.?|urnpike)      # tpk,tpk. or turnpike
  |
    ter(?:r?.?|race)      # ter,ter.,terr,terr. or terrace
  |
    tr(?:l.?|ail)          # trl,trl. or trail
  |
    pike|park|walk|loop|bay|close|gate|highlands
  |
    row|way|oval|dell|rise|vale|byway|lawn
  )
  ,?                     # optional comma
  s+                     # whitespace
  (                       # optional number,unit,apt or floor
    (
      #                    # number
    |
      unit                  # unit
    |
      num(?:.|ber)         # num,num. or number
    |
      ap(?:t.?|artment)    # apt,apt. or apartment
    |
      fl(?:.|oor)?         # fl,fl. or floor
    )
    s+
    d+
  )?
)

哪个将返回:

$1 – 完全匹配

2美元 – 门牌号码

3美元 – 街道名称

4美元 – 街道类型

5美元 – 单位或贴身号码(可选)

要在mysql中使用它,你需要删除所有注释(从’#’到eol),删除第一行(切换选项),并将所有内容折叠到一行而不包含任何空格.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读