php preg_replace, regexp - PullRequest
       8

php preg_replace, regexp

3 голосов
/ 16 мая 2010

Я пытаюсь извлечь почтовые индексы с сайта yell.com, используя php и preg_replace. Я успешно извлек почтовый индекс, но только вместе с адресом. Вот пример

$URL = "<a href="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" rel="nofollow noreferrer">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</a>";</p>

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

<p>print_r($matches);

Приведенный выше код выводит что-то вроде Массив ([0] => Массив ([0] => 7, Королевский парад, Чизлхерст, Кент BR7 6NR [1] => 55, Монмут-стрит, Лондон, WC2H 9DG ... проблема в том, что не знаю, как извлечь только почтовый индекс без адреса, потому что он не имеет точного количества цифр (иногда он имеет 6 цифр, а иногда только 5 раз). В основном я должен извлечь 2 слова из каждого массива из каждого массива , Заранее благодарю за любую помощь!

Ответы [ 2 ]

0 голосов
/ 16 мая 2010

Если вам просто нужно сопоставить последние два слова в строке, вы можете использовать это регулярное выражение:

\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* и т. Д., Но использование $ является основной идеей.

0 голосов
/ 16 мая 2010

быстро и грязно:

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

См. Это работает в: кодовая панель

...