METAR 中的正则表达式

Regular Expression in a METAR

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

LIEA 051550Z 21005KT 9999 FEW020 19/14 Q1011

在此字符串中,051550Z 表示天气公告已于每月 5 日在 15:50 UTC 发布,...而 9999 表示能见度,...

好吧,我尝试匹配一个可以输出可见性的正则表达式,但我没能摆脱这个问题。

preg_match_all() returns 我的数字

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

使用我试过的 RegExp

([0-9]{4})

然后,我盲目地加了一个

(?!Z)

尽量不要至少获得时间组... 但是没用...

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

您可以使用 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