2016-10-19 95 views
1

我有一個字符串與文本和法國郵政編碼和法國城市。正則表達式字符串+文本字符串php

$str="lore ipsum facto lore ipsum 75000 Paris"; 

我想解壓:「75000巴黎」

我知道如何提取郵編:

preg_match('/(\d{5})/',$str, $matches); 

但我不知道怎麼也加入城市後。 想法幫助我?

謝謝!

+0

'/(\ d {5})。+ /'應該這樣做,事實上你不需要括號:\ d {5}。+ \ –

+1

巴黎之後有文字嗎? – Daan

+1

有多個「單詞」的城市呢?那麼恰好有5位數字的字符串呢?有沒有考慮過這些? –

回答

3

您可以更新您的正則表達式來:

preg_match('/(\d{5} [a-zàâçéèêëîïôûùüÿñæœ\- ]+)/i',$str, $matches); 

這樣你的郵政編碼後檢查有一個空格,字母(az或特殊法語字符(小寫或大寫)),-或空空間。我認爲這涵蓋了所有城市。

例如,對於這個字符串:

lore 99912345 La Roche-sur-Yon的比賽將是:12345 La Roche-sur-Yon

Avenue de Baixas 66240 Saint-Estève將匹配:66240 Saint-Estève

+0

這是比我的評論更好的答案,因爲它只會得到郵編後面的下一個單詞,並解釋兩者之間的空間。 唯一可能導致您問題的是如果郵編_before_中有5個數字字符。 雖然這隻適用於名稱中帶有一個單詞的城市名稱。 –

+0

如果您在郵編之前有一些數字,它只會得到最後5個字符串和之後的字符串。例如,對於此輸入,「絕對99975000巴黎城市」將返回:「75000巴黎城市」 –

+0

謝謝您,但它不適用於帶口音的城市 – Bisvan

0

另一種方式來做到這一點

preg_match('/(\d{5}\s\S+)/',$str, $matches);

你會在$ matches數組中找到你的結果。

注意:這將只適用於與一個單詞的城市名稱。 如果你需要多個詞支持,那麼可能regrex不是完美的東西,因爲它可能會獲取不必要的詞。

+0

有些城市名稱裏面有空格。洛杉磯是其中最着名的一個,而且我的積極程度遠遠超過唯一。 – ChristianF

+0

哦,似乎這也是一個問題.... –

相關問題