将多行联系人卡片解析为单个变量

问题描述 投票:0回答:3

我想获取以此格式输入的数据:

John Smith
123 Fake Street
Fake City, 55555
http://website.com

并将值存储在变量中,如下所示:

$name = 'John Smith';
$address = '123 Fake Street';
$city = 'Fake City';
$zip = '55555';
$website = 'http://website.com';
  • 名称将是第一行输入的任何内容
  • 地址是第二行的内容
  • 城市是第三行逗号分隔符之前输入的内容
  • zip 是第三行逗号后面的内容 和
  • 网站是第五行的内容。

我不希望模式规则比这更严格。有人可以展示如何做到这一点吗?

php text-parsing
3个回答
3
投票
$data = explode("\n", $input);

$name    = $data[0];
$address = $data[1];
$website = $data[3];

$place   = explode(',', $data[2]);

$city    = $place[0];
$zip     = $place[1];

3
投票

嗯,正则表达式可能是这样的:

([^\r]+)\r([^\r]+)\r([^,]+),\s+?([^\r]+)\r(.+)

假设

\r
是您的换行符分隔符。 当然,使用像
explode()
这样的东西将事物分成几行会更容易......


0
投票

如果你想要更精确的东西,你可以使用这个:

$matches = array();

if (preg_match('/(?P<firstName>.*?)\\r(?P<streetAddress>.*?)\\r(?P<city>.*?)\\,\\s?(?P<zipCode>.*?)\\r(?P<website>.*)\\r/s', $subject, $matches)) {
   var_dump( $matches ); // will print an array with the parts
} else {
   throw new Exception( 'unable to parse data' );
}

干杯

© www.soinside.com 2019 - 2024. All rights reserved.