我正在尝试匹配以下NMEA字符串
$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45
我在这个link
中编写并测试了一个正则表达式正则表达式如下
\$GPRMC,((?:[0-9]+)(?:\.(?:[0-9]+))?,|,)([A|V],|,)([0-9]+\.[0-9]+,|,)([N|S|E|W],|,)([0-9]+\.[0-9]+,|,)([N|S|E|W],|,)([0-9]+\.[0-9]+,|,)([0-9]+\.[0-9]+,|,)([0-9]+,|,)([0-9]+\.[0-9]+,|,)(.*)
我在C中使用regex.h头来编译头文件,以下是我的代码
#define NU [0-9]+
#define FLT NU\\.NU
regex_text= "\\$GPRMC,((?:NU)(?:\\.(?:NU))?,|,)([A|V],|,)(FLT,|,)([N|S|E|W],|,)(FLT,|,)([N|S|E|W],|,)(FLT,|,)(FLT,|,)(NU,|,)(FLT,|,)(.*)";
find_text = "$GPRMC,092751.000,A,5321.6802,N,00630.3371,W,0.06,31.66,280511,,,A*45";
以下是我从GDB获得的错误 GDB输出:
23 int status = regcomp (r, regex_text, REG_EXTENDED|REG_NEWLINE);
(gdb)
24 if (status != 0) {
(gdb)
26 regerror (status, r, error_message, MAX_ERROR_MSG);
(gdb)
27 printf ("Regex error compiling '%s': %s\n",
(gdb)
28 regex_text, error_message);
(gdb)
27 printf ("Regex error compiling '%s': %s\n",
(gdb)
Regex error compiling '\$GPRMC,((?:NU)(?:\.(?:NU))?,|,)([A|V],|,)(FLT,|,)([N|S|E|W],|,)(FLT,|,)([N|S|E|W],|,)(FLT,|,)(FLT,|,)(NU,|,)(FLT,|,)(.*)': Invalid preceding regular expression
29 return 1;
感谢任何帮助
答案 0 :(得分:0)
POSIX标准不支持您使用(?:NU)
。在我的系统(Clang)上,如果我提炼代码,则会显示错误消息:
Regex error compiling '(?:NU)': repetition-operator operand invalid
您可以使用REG_ENHANCED
代替REG_EXTENDED
来解决此问题。或者您可以放弃非捕获组并改为使用捕获组:
"\\$GPRMC,((NU)...
顺便说一下,[N|S|E|W]
应该是[NSEW]
。