2017-02-10 12 views
1

私はスプリットアドレスが必要です:Main Str. 202-52street=Main Str. house No.=202 room No.=52 に私はこれを使用しようとした:それは時に道路名1つの単語を働いているスプリットアドレスストリート名の家屋番号と部屋番号

$data['address'] = "Main Str. 202-52"; 
$data['street'] = explode(" ", $data['address']); 
$data['building'] = explode("-", $data['street'][0]); 

。ストリート名に複数の単語が含まれている分割アドレス。 私は$data['street'] = preg_split('/[0-9]/', $data['address']);を試みたが、唯一の道路名を取得...

答えて

1

を使用すると、グループ1に、最後の空白にすべてを必要とする場合は、

/^(.*)\s(\d+)\W+(\d+)$/ 

のような正規表現を使用して、次の桁グループ2へと最後の数字はグループ3になります。\W+は、単語の文字以外の1文字以上の文字と一致するので、-以上と一致します。 -がある場合は、\W+の代わりにハイフンを使用してください。

regex demoPHP demo参照してください:

$s = "Main Str. 202-52"; 
if (preg_match('~^(.*)\s(\d+)\W+(\d+)$~', $s, $m)) { 
    echo $m[1] . "\n"; // Main Str. 
    echo $m[2] . "\n"; // 202 
    echo $m[3];  // 52 
} 

パターンの詳細:

  • ^ - として改行文字以外の任意の0+文字をキャプチャグループ1 - 文字列の先頭
  • (.*)を可能な限り最後まで。
  • \s - 空白は、
  • (\d+) ...と続く - グループ2:1以上の数字
  • \W+ - 1+非単語の文字
  • (\d+) - グループ3:1以上の数字
  • $ - エンド文字列の。
  • また

は、場合に最後の部分は、オプションのキャプチャグループ(すなわち(?:...)?(?:\W+(\d+))?)と\W+(\d+)ラップ、任意とすることができることに留意されたいです。

+0

@ WiktorStribiżew...あなたは天才です。ありがとうございました。はい正規表現良い判断。 –

+0

私はちょっと、正規表現を ''/^(。*)\ s(\ d +)(?:\ W +(\ d +))?$/''エラーなく...編集しました。 –