Я попробовал это локально, и это было так же, как вы описали, у меня есть PHP 5.2.10-2ubuntu6
.
Первая попытка , я удалил "(?P<comments>.*)",
вашего шаблона:
$line='"HA035028","Hursley Road - Leigh House Hospital","","HURSLEY","52 58.3498N","1 26.5421W","","","24","","","","iiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipii",';
$r=preg_match('/^"(?P<code>.+)","(?P<description>.+)","(?P<bay>.*)","(?P<area>.+)","(?P<lat>.+)","(?P<lon>.+)","(?P<build>.*)","(?P<msgTime>.*)","(?P<routes>.*)","(?P<simNo>.*)","(?P<displayType>.*)","(?P<version>.*)",$/', $line, $matches);
var_dump($r, $matches);
Вывод:
int(1)
array(25) {
[0]=>
string(169) ""HA035028","Hursley Road - Leigh House Hospital","","HURSLEY","52 58.3498N","1 26.5421W","","","24","","","","iiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipii","
["code"]=>
string(8) "HA035028"
[1]=>
string(8) "HA035028"
["description"]=>
string(35) "Hursley Road - Leigh House Hospital"
[2]=>
string(35) "Hursley Road - Leigh House Hospital"
["bay"]=>
string(0) ""
[3]=>
string(0) ""
["area"]=>
string(7) "HURSLEY"
[4]=>
string(7) "HURSLEY"
["lat"]=>
string(11) "52 58.3498N"
[5]=>
string(11) "52 58.3498N"
["lon"]=>
string(13) "1 26.5421W",""
[6]=>
string(13) "1 26.5421W",""
["build"]=>
string(0) ""
[7]=>
string(0) ""
["msgTime"]=>
string(2) "24"
[8]=>
string(2) "24"
["routes"]=>
string(0) ""
[9]=>
string(0) ""
["simNo"]=>
string(0) ""
[10]=>
string(0) ""
["displayType"]=>
string(0) ""
[11]=>
string(0) ""
["version"]=>
string(57) "iiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipii"
[12]=>
string(57) "iiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipii"
}
Обратите внимание, что <version>
теперь соответствует последнему полю, а <lon>
соответствует двум полям
Вторая попытка ;Я заменял каждое .
вхождение на [^"]
:
$line='"HA035028","Hursley Road - Leigh House Hospital","","HURSLEY","52 58.3498N","1 26.5421W","","","24","","","","iiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipii",';
$r=preg_match('/^"(?P<code>[^"]+)","(?P<description>[^"]+)","(?P<bay>[^"]*)","(?P<area>[^"]+)","(?P<lat>[^"]+)","(?P<lon>[^"]+)","(?P<build>[^"]*)","(?P<msgTime>[^"]*)","(?P<routes>[^"]*)","(?P<simNo>[^"]*)","(?P<displayType>[^"]*)","(?P<version>[^"]*)","(?P<comments>[^"]*)",$/', $line, $matches);
Вывод:
int(1)
array(27) {
[0]=>
string(169) ""HA035028","Hursley Road - Leigh House Hospital","","HURSLEY","52 58.3498N","1 26.5421W","","","24","","","","iiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipii","
["code"]=>
string(8) "HA035028"
[1]=>
string(8) "HA035028"
["description"]=>
string(35) "Hursley Road - Leigh House Hospital"
[2]=>
string(35) "Hursley Road - Leigh House Hospital"
["bay"]=>
string(0) ""
[3]=>
string(0) ""
["area"]=>
string(7) "HURSLEY"
[4]=>
string(7) "HURSLEY"
["lat"]=>
string(11) "52 58.3498N"
[5]=>
string(11) "52 58.3498N"
["lon"]=>
string(10) "1 26.5421W"
[6]=>
string(10) "1 26.5421W"
["build"]=>
string(0) ""
[7]=>
string(0) ""
["msgTime"]=>
string(0) ""
[8]=>
string(0) ""
["routes"]=>
string(2) "24"
[9]=>
string(2) "24"
["simNo"]=>
string(0) ""
[10]=>
string(0) ""
["displayType"]=>
string(0) ""
[11]=>
string(0) ""
["version"]=>
string(0) ""
[12]=>
string(0) ""
["comments"]=>
string(57) "iiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipii"
[13]=>
string(57) "iiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipiiiipii"
}