हालांकि यह सही नहीं है और काफी धीमा हो सकता है, आप 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 तक) को अलग करना होगा, पहली पंक्ति को हटाना होगा (विकल्प स्विच करें), और बिना किसी रिक्त स्थान के एक पंक्ति में सब कुछ संक्षिप्त करें।