PHP正则表达式缺少捕获组

时间:2018-01-20 22:36:21

标签: php regex

我正在尝试解析几个坐标,但PHP preg_match缺少一个捕获组。它适用于我测试过的每个正则表达式模拟器,但不适用于我的代码。第4组总是空着;

$coordinates = 'N40.765775°  E8.303369°';
// -40.765775°  -8.303369°
//  40.765775°  8.303369°
// -40.765775°  8.303369°
// N40.765775°  E8.303369°
// S40.765775°  E8.303369°
// N40.765775°  W8.303369°
// S40.765775°  W8.303369°

$regex = '/([-NnSs]?)\D*([0-9]?[0-9])\.(\d{1,10}+)\D\h*([-EeWw]?)\D*([0-1]?[0-9]?[0-9])\.(\d{1,10}+)/';
if (preg_match($regex, $coordinates, $matches)) {
    print_r($matches);
} else {
    echo "no matches";
}

1 个答案:

答案 0 :(得分:2)

由于您正在解析具有多字节字符(°)的字符串,因此您应该在正则表达式的末尾添加unicode the date of files is not restored correctly,即u

/      /u

就像插图一样:没有该修饰符,如果您要在.之后添加\D,请执行以下操作:

\D.\h*([-EeWw]?)

...然后你将捕获第四个捕获组中的“E”。因此\D.实际上匹配多字节字符°