2013-10-12 51 views
1

我正在爲網頁中的廢舊電話號碼編寫一個小腳本。此頁面有類似下面preg match從頁面獲取所有類型的電話號碼使用php

-PH:(07) 46 3000 66, BUSINESS HOURS, 9-5 MON-FRI, 9-12 SAT-SUN. 
-Please phone 54974211 or 0411053074 both between 10 am – 8 pm or 
-or Phone 07 5497 1000 if you get 
-Email or ph 0755431528. 
-Phone 0414 791 796 
-Or ph 0418117617 

我使用了一些至REGx模式,如

preg_match_all('/([\w+\.]*\[email protected][\w+\.]*\w+[\w+\-\w+]*\.\w+)/is',$pagecontents,$results); 
var_dump($results); 

電話號碼的各種格式,但我螞蟻弄清楚怎樣才能得到所有這類的電話號碼。任何人都可以使用preg_match或其他任何PHP方式幫助我從頁面獲取所有類型的電話號碼。 謝謝

回答

1

從我從網站上清理數據的經驗,這是IMPOSIBLE採取所有電話號碼(免費文本),除非你會寫所有可能compinations。

使用你的文本示例試試這個

preg_match_all('/(ph:|ph |phone)([\(\)\d or\-]+?)([^\(\)\d or\-]|$)/is',$pagecontents,$results); 
var_dump($results[2]); 
+0

這個工程,但得到的結果與PH:(07)46 3000 66,像這樣我們可以擺脫PH:,像一個。謝謝 –

+1

您將$結果更改爲$ results [2] ??? – Darka

1

嘗試使用this one\(?\d+\)?(\s*\d+){3}

+0

得到錯誤 preg_match_all()[function.preg-全匹配]:分隔符不能是字母,數字或反斜線 –

+0

是啊,其實我只貼正則表達式,以在'preg_match_all php函數'中使用它,你必須用'/'封裝它並轉義一些字符。 –

1

你可以用這個模式嘗試,演示:

$pattern = '~(?>(\()?0\d(?(1)\))\s?+)?+\d\d\s?+(?>\d{3}\s?\d{3}|(?:\d\d\s??){3})~'; 
$subject = <<<'LOD' 
-PH:(07) 46 3000 66, BUSINESS HOURS, 9-5 MON-FRI, 9-12 SAT-SUN. 
-Please phone 54974211 or 0411053074 both between 10 am – 8 pm or 
-or Phone 07 5497 1000 if you get 
-Email or ph 0755431528. 
-Phone 0414 791 796 
-Or ph 0418117617 
LOD; 

preg_match_all($pattern, $subject, $matches); 

print_r($matches); 
+0

雅它工作:)感謝很多 –

+0

事情是這也得到谷歌分析代碼和adsence帳戶ID作爲電話號碼。我認爲需要一些增強:) –

+0

@smithbandara:嘗試添加字邊界或周邊來檢查周圍是否有數字。 –