METAR中的正则表达式

时间:2018-11-05 16:42:01

标签: php regex preg-match-all

我遇到了一些简单而棘手的问题。 这里有一个METAR(天气以非常特定的字符串格式)。

LIEA 051550Z 21005KT 9999 FEW020 19/14 Q1011

在此字符串中,051550Z表示天气公告是在每月5号世界标准时间15:50发出的,...和9999表示可见性,...

好吧,我试图匹配一个RegExp,该RegExp可以向我输出可见性,但是我并没有设法解决这个问题。

preg_match_all()返回数字

0515 (from the time group)
2100 (from the wind group)
9999 (wanted)
1011 (from the pressure group)

使用我尝试过的RegExp

([0-9]{4})

然后,我盲目添加了

(?!Z)

尝试至少不获取时间组... 但这不起作用...

看看问题本身,是不是最好每次都考虑获取数组的第三个元素(不添加(?!Z)RegExp)还是尝试直接获取正确的值? 我认为最后的选择会更好。 那么,如何获得可见性?

1 个答案:

答案 0 :(得分:0)

您可以使用word boundary \b,然后匹配4位数字以获取可见性:

\b\d{4}\b

如果在第四个位置必须是4位数字,则还可以匹配前3组,匹配1+倍而不是空格字符\S+,然后匹配1+倍的水平空格\h,然后重复3次。

然后使用\K忘记匹配的内容,并匹配4位数字和一个单词边界。

^(?:\S+\h+){3}\K\d{4}\b

Regex demo