2017-02-10 10 views
1

나는 분할 주소가 필요합니다 : Main Str. 202-52street=Main Str. house No.=202 room No.=52 에 내가 이것을 사용하려고 : 그것은 때 거리 이름 한 단어를하고있다분할 주소 거리 이름 집 번호와 방 번호

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

. 거리 이름에 여러 단어가있는 주소를 분할하는 방법. 난 당신이 1 군에 마지막 공백에 모두를 필요로하는 경우

답변

1

당신은

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

같은 정규 표현식을 사용할 수 있습니다 ... $data['street'] = preg_split('/[0-9]/', $data['address']);하지만 거리 이름을 얻는 시도, 그룹 2에 다음 숫자와 그룹 3의 마지막 자릿수. \W+은 단어 char 이외의 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 - 문자열의 시작
  • (.*)을 가능한 한 많이 마지막까지 ...
  • - 공백은
  • (\d+) ... 뒤를 - 그룹 2 : 하나 이상의 숫자
  • \W+ - 1+ 단어가 아닌 문자
  • (\d+) - 그룹 3 : 하나 이상의 숫자
  • $ - 끝 문자열의.

또한, 경우에 마지막 부분이 선택적으로 포획 기 (즉 (?:...)?, (?:\W+(\d+))?을)를 \W+(\d+) 래핑, 선택 될 수 있다는 점에 유의하라.

+0

@ Wiktor Stribiżew ... 당신은 천재입니다. 고맙습니다. 예 정규식 좋은 결정. –

+0

나는 약간의 정규식을''/^(. *) \ s (\ d +) (? : \ W + (\ d +))? $/''오류없이 수정했다 ... 나는 선택적인 제안을 사용해야한다. –