可能是简单的php正则表达式

时间:2011-09-24 01:26:16

标签: php regex

很抱歉我可以研究一个简单的问题,但是我今天在数据库中崩溃了12个小时,并想回家。

我正在递归遍历试图提取城市,电话号码和电子邮件地址的文件,这样我就可以将城市和电话与我的数据库条目相匹配并更新用户的电子邮件地址。理论上,他们只需使用他们的电子邮件登录并请求重置密码。

继承人我需要的东西。我的文件内容如下所示:

> Address : 123 main street City : somecity State/Province : somestate
> Zip/Postal Code : 12345 Country : United States Phone : 1231231234 Fax
> : E-Mail : example@example.com ==== CUSTOMER SHIPPING INFORMATION ===

我应该注意到我展示的片段之前和之后还有其他信息。有人可以请一个正则表达式帮我删除3项?感谢。

3 个答案:

答案 0 :(得分:2)

尝试这样的事情,没有正则表达式..

$string = 'Address : 123 main street City : somecity State/Province : somestate Zip/Postal Code : 12345 Country : United States Phone : 1231231234 Fax : E-Mail : example@example.com ==== CUSTOMER SHIPPING INFORMATION ===';

$string = str_replace(
array(
' ==== CUSTOMER SHIPPING INFORMATION ===',
'Address',
'City',
'State/Province',
'Zip/Postal Code',
'Country',
'Phone',
'Fax',
'E-Mail'
)
, '', $string);

$string = explode(' : ', $string);
unset($string[0]);
print_r($string);

结果...

Array
(
    [0] => 
    [1] => 123 main street 
    [2] => somecity 
    [3] => somestate 
    [4] => 12345 
    [5] => United States 
    [6] => 1231231234 
    [7] => 
    [8] => example@example.com
)

如果有换行符,就像这样......

$string = explode("\n", $string);
foreach($string as $value){
    list(, $info) = explode(' : ', $value);
    echo $info . '<br />';
}

正则表达式解决方案..

$fields = array('City', 'Phone', 'E-mail');
foreach($fields as $field){
    preg_match("#$field : (.*?) #is", $string, $matches);
    echo  "$field : $matches[1]";
    echo '<br />';
}

结果:

City : somecity
Phone : 1231231234
E-mail : example@example.com

答案 1 :(得分:1)

这样的事情:

Address\s*:\s*(.*?)\s*City\s*:\s*(.*?)\s*State/Province\s*:\s*(.*?)\s*Zip/Postal Code\s*:\s*(.*?)\s*Country\s*:\s*(.*?)\s*Phone\s*:\s*(.*?)\s*Fax\s*:\s*(.*?)\s*E-Mail\s*:\s*(.*?)\s

如果你先在每一行的开头撕掉>,就行了。

proof

如果你print_r,你会看到不同的组件。

请注意“点匹配所有”修饰符。如果你撕掉新行,你可能会更容易(在你取出>之后)。

答案 2 :(得分:0)

这个怎么样?

$test = 
'
> Address : 123 main street City : somecity State/Province : somestate
> Zip/Postal Code : 12345 Country : United States Phone : 1231231234 Fax
> : E-Mail : example@example.com ==== CUSTOMER SHIPPING INFORMATION ===
';

preg_match('@.*City : (.+?) .*? Country : (.+?) Phone : (.+?) .*@si',$test,$res);
var_dump($res);

结果

array
  0 => string '
> Address : 123 main street City : somecity State/Province : somestate
> Zip/Postal Code : 12345 Country : United States Phone : 1231231234 Fax
> : E-Mail : example@example.com ==== CUSTOMER SHIPPING INFORMATION ===
' (length=217)
  1 => string 'somecity' (length=8)
  2 => string 'United States' (length=13)
  3 => string '1231231234' (length=10)