dopa53272 2018-01-20 22:36
浏览 61
已采纳

PHP正则表达式缺少捕获组

I'm trying to parse several coordinates, but PHP preg_match is missing a capture group. It works in every regex simulator I've tested, but not in my code. Group 4 always comes up empty;

$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条回答 默认 最新

  • duanbimo7212 2018-01-20 22:41
    关注

    Since you are parsing strings that have multibyte characters (°), you should add the unicode modifier, i.e. u at the end of the regex.

    /      /u
    

    Just as an illustration: without that modifier, if you would add a . after \D, here:

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

    ... then you would capture the "E" in the fourth capture group. So \D. actually matches the multibyte character °.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助