PHP bir dize eşleştirme

5 Cevap

Ben bir Hint şirketi veri seti var ve adres alanına gelen Şehir ve Zip ayıklamak gerekir:

Address Field Example: Gowripuram West, Sengunthapuram Post, Near L.G.B., Karur, Tamilnadu, Karur - 639 002, India

(Tire) - Gördüğünüz gibi Şehir Karur ve zip sonra takip edilir.

I [şehir] maç için PHP kodu gerekir - [zip]

Bunun nasıl emin değilim Hypen sonra Zip bulabilirsiniz ama Şehir bulmak için nasıl emin değil, Şehir 2 kelime olabilir unutmayın.

Zaman ayırdığınız için Cheers. /

J

5 Cevap

Regex tüm uygulamalarda kendi yeri vardır, ancak farklı ülkelerde / dillerde size zaman işleme mikro miktarlarda gereksiz karmaşıklığı ekleyebilirsiniz.

Bu deneyin:

<?php

$str  = "Gowripuram West, Sengunthapuram Post, Near L.G.B., Karur, Tamilnadu, Karur - 639 002, India";
$res  = substr($str,strpos($str, "," ,3), strpos($str,"\r"));
//this results in " Karur - 639 002, India";

$ruf  = explode($res,"-");
//this results in 
//$ruf[0]="Karur " $ruf[1]="639 002, India";

$city    = $ruf[0];
$zip     = substr($ruf[1],0,strpos($ruf[1], ",");
$country = substr($ruf[1],strpos($ruf[1],","),strpos($ruf[1],"\r"));

?>

Test edilmedi. ~ Umarım yardımcı olur

Bu deneyin:

<?php
$address = "Gowripuram West, Sengunthapuram Post, Near L.G.B., Karur, Tamilnadu, Karur - 639 002, India";

// removes spaces between digits.
$address = preg_replace('{(\d)\s+(\d)}','\1\2',$address);

// removes spaces surrounding comma.
$address = preg_replace('{\s*,\s*}',',',$address);
var_dump($address);

// zip is 6 digit number and city is the word(s) appearing betwwen zip and previous comma.
if(preg_match('@.*,(.*?)(\d{6})@',$address,$matches)) {
    $city = trim($matches[1]);
    $zip = trim($matches[2]);
}

$city = preg_replace('{\W+$}','',$city);

var_dump($city);    // prints Karur
var_dump($zip);     // prints 639002

?>

Tüm alanlarda bir dizi yapmak için patlayabilir kullanabilirsiniz, size tire onları ayırabilirsiniz. Daha sonra bir dizi 2. değerlere sahip olacaktır. Birinci, ikinci zip olacak (2 kelime olabilir) senin şehir olacak.

$info= explode("-",$adresfieldexample);

Ben normal ifadeler öneriyoruz. Eğer ifade derleme beri ve üzerinde kullanarak eğer performansı iyi olmalıdır.

Regex $matches[1] yerlerde "Karur" ve "639 002" Aşağıdaki $matches[2].

Ayrıca, çok kelime, şehir adları için çalışıyor.

$str = "Gowripuram West, Sengunthapuram Post, Near L.G.B., Karur, Tamilnadu, Karur - 639 002, India";

preg_match( '/.+, (.+) - ([0-9]+ [0-9]+),/', $str, $matches);

print_r($matches);

Regex muhtemelen gelişmiş olabilir, ama senin sorunun belirtilen gereksinimleri karşılayan inanıyorum.