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
我有一些简单而棘手的问题。 这里我有一个 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