2016-10-19 43 views
1

テキストとフランス語の郵便番号とフランス語の都市の文字列があります。正規表現の数字+文字列の文字列PHP

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

しかし、私は後にも、市内を追加する方法がわからない:私は郵便番号を抽出する方法を知っている「75000パリ」

を:

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

私が抽出したいと思います。 私を助けるアイデアですか?

ありがとうございました!

+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

これは郵便番号の後ろに次の単語しか得られず、2つの間のスペースを考慮しているので、コメントよりも良い答えです。 問題が発生するのは、郵便番号の前に文字列に5文字の数字がある場合のみです。 これは、名前に1語の都市名でのみ機能しますが、 –

+0

郵便番号の前に数字がある場合は、最後の5文字とそれ以降の文字列のみを取得します。たとえば、この入力の場合、 'lore 99975000 Paris City'が返されます:' 75000 Paris City' –

+0

ありがとうございますが、アクセントの都市では機能しません – Bisvan

0

必要になります。この

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

を行う別の方法を$ matches配列で結果を見つけてください。

注::これは1つの単語の都市名でのみ機能します。 複数の単語をサポートする必要がある場合は、不要な単語もフェッチする可能性があるため、regrexは完璧なものではありません。

+0

都市名にはスペースが入ります。ロサンゼルスはより有名なものの一つであり、私は唯一のものから遠いポジティブです。 – ChristianF

+0

ああ、それはあまりにも問題があるようです.... –