街道地址的简单PHP正则表达式 - 完全不需要


Simple PHP Regex For Street Address - Perfect NOT Required

所以我已经连续工作了三天,使用PHP脚本从美国各地获取各种银行信息。我正在提取的所有单个值都有效,除了地址的开头。

这不一定是完美的,我正在刮擦>和

         >20 Cross Street<
         >1 Dillinger Avenue<
         >189 Beautiful Way<
         >5768 Some Longer Address That Is Crazy Like Ave.<
         >857489 Monkey On My Back Highway<
         >378 My Pants Are Ablaze Boulevard<

这是我到目前为止所拥有的;

     '~>[0-9]{1-7}.*'s[Street|St.|St|Road|Rd|Rd.]<~'

转义点并将破折号替换为 {1-7} 用昏迷 {1,7}

[0-9]{1,7}.*'s(?:Street|St'.|St|Road|Rd|Rd'.)
好吧,

您需要至少进行一项重要的更改和几个小更改:

'~>[0-9]{1,7}.*'s(?:Street|St'.?Road|Rd'.?)<~'
                 ^^                          ^

在你的表达式中,你使用了字符类,这是错误的,因为字符类中的所有内容都是从字面上理解的,它是一组字符,而不是单词。

{1-7}是错误的,{1,7}用于匹配它前面的东西 1 到 7 次。

另外,你不能直接使用.,因为它们有特殊的含义,所以你需要像这样转义它们'.

换句话说,[Street|St.|St|Road|Rd|Rd.]匹配单个字符而不是整个单词,它甚至与字面|匹配。

如果要查找包含列表中任何字符串的任何地址,则必须将其定义为"匹配模式"的一部分。

您可以使用 preg_match() 函数,如果找到匹配项,则返回 1,否则返回 0。

匹配模式的示例列表可以是:

/街道|街*|方式|大道/和类似。

这不是正则表达式,而是可能解析街道地址的解决方案?

将 Steet 地址解析为组件

即使这不能解决你的问题,正则表达式也是这个问题的错误解决方案,你需要一个解析器或语法。 比正则表达式更复杂的东西。

你会让自己发疯,试图用正则表达式解决这个问题。