PHP中的简单REGEX问题

时间:2010-10-01 02:23:30

标签: php regex

我想以这种格式输入数据:

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';

因此,名字将是第一行输入的内容 地址是第二行的任何内容 city是在逗号分隔符之前的第三行输入的内容 zip是逗号后第三行的任何内容 和网站是第五行的任何内容

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

3 个答案:

答案 0 :(得分:3)

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

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

假设\r是你的新行分隔符。当然,使用像explode()之类的东西来分割内容更容易......

答案 1 :(得分:3)

$data = explode("\n", $input);

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

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

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

答案 2 :(得分: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' );
}

欢呼声