php preg_replace,regexp

时间:2010-05-16 03:54:12

标签: php regex preg-replace

我正在尝试使用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个字来自每个阵列。   提前感谢您的帮助!

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);

?>

This prints

Array
(
    [0] => BR7 6NR
)

您可以通过在最后一个单词\s*之后允许使用可选的尾随空格等来使正则表达式更加健壮,但使用$是主要想法。