2

因此,我已经连续三天使用 PHP 脚本来获取来自美国各地的各种银行信息。除了地址的开头之外,我要提取的所有单个值都有效。

这不一定是完美的,我正在刮掉 > 和 < 符号以使其更容易。这些是我需要匹配的示例。我编写了代码以在事后去除大于和小于字符 - 请注意,我只对以下结尾的地址感兴趣:Way, Street, St., St, Avenue, Ave, Ave., Road, Rd, Rd., Highway, Hwy, Hwy, Boulevard, Bvd, Bvd., Crescent, Cres., Cres等

         >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.]<~'
4

4 回答 4

1

转义点并将破折号替换为 {1-7} 和逗号 {1,7}

[0-9]{1,7}.*\s(?:Street|St\.|St|Road|Rd|Rd\.)
于 2013-11-01T21:11:24.540 回答
0

好吧,您至少需要进行一项重要更改和几项小更改:

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

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

{1-7}是错误的,{1,7}用于匹配它之前的事物 1 到 7 次。

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

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

于 2013-11-01T20:59:33.030 回答
0

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

将 Steet 地址解析为组件

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

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

于 2013-11-01T21:30:31.600 回答
0

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

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

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

/Street|St.*|Way|Avenue/ 和类似的。

于 2013-11-01T21:24:24.093 回答