2012-01-17 54 views
0

任何人都可以幫助我一個快速的正則表達式問題?使用Reg打破給定的HTML代碼Exp

我有以下HTML:

555 Some Street Name<BR /> 
New Providence VA 22901-1311<BR /> 
United States<BR /> 

第一行總是街

第二行是城市(其可以有空格)空間國家Abbv。空格郵編連字符4位數字郵編

第三行是國家。

我需要將HTML分解成每個變量。任何人都可以提供一個快速正則表達式?

編輯:也許我不清楚。我需要以下內容: 街道地址,城市,州,郵編,4Digit郵編,國家作爲個體變量。

+2

是它在不同的線路設置的一切嗎?然後,您可以剝下標籤並拿走它。 – footy 2012-01-17 16:30:12

+0

在這種情況下,「Zip」和「4Digit Zip」是什麼?一個例子會很好。 (我來自德國,我不習慣這種格式)。 – Armin 2012-01-17 16:35:43

+0

要構造一個正則表達式,請參見[開源regexbuddy](http://stackoverflow.com/questions/89718/is-there)和[在線正則表達式測試](http://stackoverflow.com/questions/32282/regex-測試)一些有用的工具,或[regexp.info](http://regular-expressions.info/)更好的教程。 – mario 2012-01-17 16:37:51

回答

1
555 Some Street Name<BR /> 
New Providence VA 22901-1311<BR /> 
United States<BR /> 

確定,爲第一部分,讓我們分裂

$array = explode('<BR />', $address); 

現在你需要從第二行中的信息進行分析,以及該行...

$array[1] = New Providence VA 22901-1311; 

$ tmp = explode('',$ array [1]);

和所有你現在需要的是在正確的變量名

$fullZip = array_pop($tmp); 
$zipArray = explode('-',$fullZip); 
$zip = $zipArray[0]; 
$Digitzip = $zipArray[1]; 
$state = array_pop($tmp); 
$providence = implode($tmp); 
$country = $array[2]; 
$street = $array[0]; 
0

不需要正則表達式。

$htmlStr = '555 Some Street Name<BR />New Providence VA 22901-1311<BR />United States<BR />'; 

Live example

注意,但是,對於更復雜的HTML解析,regexes are not the tool for the job

+1

錯誤的編程語言! ;-) – Armin 2012-01-17 16:32:03

+0

@Armin哎呀,我現在覺得很蠢,我習慣於回答JS的問題哈哈。編輯答案。 – 2012-01-17 16:52:52

0
$array = explode('<BR />', $address); 

這是最簡單的方法,只是由<br />標籤都有效拆分字符串。如果你能避免正則表達式,你應該這樣做,因爲它們不像簡單的字符串操作那樣性能高,如explode

+0

也許我不清楚。我需要以下內容: 街道地址,城市,州,郵編,4Digit郵編,國家作爲個體變量。 – 2012-01-17 16:33:01

+0

你只需要使用$ array [1],因爲[0]和[2]已經包含,你想要什麼。你可以將'strpos'和'substr'結合使用,並用「VA」字符串分割這部分。 – Armin 2012-01-17 16:37:45

2

這甚至不需要正則表達式。您可以使用explode("<BR />",...)拆分不同線路。第一行是街,最後一行是國家。中間一行可以用substr()分開,因爲您知道最後4個字符是4位數字的ZIP,它們之前的6個字符是ZIP後跟一個連字符,並且之前的3個字符是狀態後跟一個空格。所以段的字符數(從行尾計算)是恆定的。

+0

我喜歡這個。如果我必須在100,000行數據上運行同樣的東西,那麼substr仍然會比preg_match更好? – 2012-01-17 16:40:31

+0

Definitly。我現在沒有數字,但是substr的運行速度要比preg_match快得多 – Simon 2012-01-17 18:20:13