PHP匹配字符串

时间:2010-03-02 15:17:58

标签: php

我有一个印度公司数据集,需要从地址字段中提取City和Zip:

地址字段示例: Gowripuram West,Sengunthapuram Post,Near L.G.B.,Karur,Tamilnadu,Karur - 639 002,India

正如你所看到的城市是Karur,在 - (连字符)后面跟着拉链。

我需要PHP代码来匹配[city] - [zip]

不知道如何做到这一点我可以在Hypen之后找到Zip但不知道如何找到City,请注意City可以是2个单词。

为你的时间喝彩./

Ĵ

6 个答案:

答案 0 :(得分:1)

试试这个:

<?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

?>

答案 1 :(得分:0)

你可以使用explode来创建所有字段的数组,你可以在连字符上拆分它们。那么你将在一个数组中有2个值。第一个将是你的城市(可以是2个单词),第二个将是你的拉链。

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

答案 2 :(得分:0)

我会推荐正则表达式。如果你一遍又一遍地使用它,性能应该很好,因为你可以预编译表达式。

答案 3 :(得分:0)

以下正则表达式将“Karur”放在$matches[1]中的$matches[2]和“639 002”中。

它也适用于多字城市名称。

$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);

可能会改进正则表达式,但我相信它符合您问题中指定的要求。

答案 4 :(得分:0)

Regex在所有应用程序中占有一席之地,但在不同的国家/语言中,您可以为微量处理时间添加不必要的复杂性。

试试这个:

<?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"));

?>

未经测试。希望它有所帮助〜

答案 5 :(得分:0)

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

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

$Hi=explode(",","$info1[1]");

echo $Hi[0];

hopes this will help u.....