POSIX Regex用于捕获最多x次出现

qpgpyjmq  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(100)

我正在使用POSIX正则表达式,并试图捕捉字符串中给定模式的所有出现。
字符串是

N2800 W08700-N2730 W08430-N2645 W08415-N2500 W08630-N2430>>W08900-N2630 W08845-N2800 W08700. TOP FL360. MOV NE 5KT. WKN.

我尝试了以下操作,但它只匹配第一次出现(N2800 W08700):

([NS]\d{4}(\s|>>)[EW]\d{5}){1,11}

最后的{1,11}不是说要在1到11次之间匹配模式吗?

pbpqsu0x

pbpqsu0x1#

\d不是POSIX。
{1,11}表示1到11个 * 连续 * 匹配,但在第一个匹配之后有-。试试([NS]\d{4}(\s|>>)[EW]\d{5}-?){1,11}

$ echo  'N2800 W08700-N2730 W08430-N2645 W08415-N2500 W08630-N2430>>W08900-N2630 W08845-N2800 W08700. TOP FL360. MOV NE 5KT. WKN' \
 | grep -P '([NS]\d{4}(\s|>>)[EW]\d{5}-?){1,11}'
>>>>>>>>>N2800 W08700-N2730 W08430-N2645 W08415-N2500 W08630-N2430>>W08900-N2630 W08845-N2800 W08700<<<<<<<<<. TOP FL360. MOV NE 5KT. WKN

请注意,-P选择Perl regexp。

$ echo  'N2800 W08700-N2730 W08430-N2645 W08415-N2500 W08630-N2430>>W08900-N2630 W08845-N2800 W08700. TOP FL360. MOV NE 5KT. WKN' \
| perl -pe 's/([NS]\d{4}(\s|>>)[EW]\d{5}-?){1,11}/MATCH/'
MATCH. TOP FL360. MOV NE 5KT. WKN

相关问题