所以我已经连续工作了三天,使用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 地址解析为组件
即使这不能解决你的问题,正则表达式也是这个问题的错误解决方案,你需要一个解析器或语法。 比正则表达式更复杂的东西。
你会让自己发疯,试图用正则表达式解决这个问题。