我正在尝试使用php和preg_replace从yell.com中提取邮政编码。 我成功提取了邮政编码,但只跟地址一起提取。这是一个例子
$URL = "http://www.yell.com/ucs/UcsSearchAction.do?scrambleSeed=17824062&keywords=shop&layout=&companyName=&location=London&searchType=advance&broaderLocation=&clarifyIndex=0&clarifyOptions=CLOTHES+SHOPS|CLOTHES+SHOPS+-+LADIES|&ooa=&M=&ssm=1&lCOption32=RES|CLOTHES+SHOPS+-+LADIES&bandedclarifyResults=1";//get yell.com page in a string $htmlContent = $baseClass->getContent($URL); //get postal code along with the address $result2 = preg_match_all("/(.*)</span>/", $htmlContent, $matches);
print_r($matches);
上面的代码输出类似的东西 数组([0] =&gt;数组([0] =&gt; 7,Royal Parade,Chislehurst,Kent BR7 6NR [1] =&gt; 55,Monmouth St,London,WC2H 9DG ....我有的问题是我不知道如何只提取没有地址的邮政编码,因为它没有确切的数字位数(有时它有6位数,有时只有5位)。基本上我应该提取持续的2个字来自每个阵列。 提前感谢您的帮助!
答案 0 :(得分:0)
快速&amp;脏:
# your array item
$string = "7, Royal Parade, Chislehurst, Kent BR7 6NR";
# split on spaces
$bits = preg_split('/\s/', $string);
# last two bits
end($bits);
$postcode = prev($bits) . " " . end($bits);
echo $postcode;
请参阅:code pad
答案 1 :(得分:0)
如果您只需要匹配字符串中的最后两个单词,则可以使用此正则表达式:
\b\w+\s+\w+$
这将与它所说的匹配:单词边界,一些非空单词,一些空格,然后是另一个单词,后跟字符串锚点结束。
<?php
$text = "7, Royal Parade, Chislehurst, Kent BR7 6NR";
$result = preg_match("/\\b\\w+\\s+\\w+$/", $text, $matches);
print_r($matches);
?>
Array
(
[0] => BR7 6NR
)
您可以通过在最后一个单词\s*
之后允许使用可选的尾随空格等来使正则表达式更加健壮,但使用$
是主要想法。