В вашем регулярном выражении есть несколько ошибок, например, двойное |
в группе без захвата и экранирование +
, которое является квантификатором и поэтому не требует экранирования, если вы не пытаетесь сопоставить буквальный +
.
Также не нужно искать обходных путей. Вы можете использовать:
-?(?:VC|RE|MI|BC|DR|BL|SH|TS|FZ|PR|DZ|RA|SN|SG|IC|PL|GR|GS|UP|BR|FG|FU|DU|SA|HZ|SS|DS){2,}
Regex demo здесь .
MATLAB демо:
>> taf_input = 'KMEM 080545Z 0806/0912 18005KT P6SM VCSH FEW025 SCT060 BKN150 TEMPO 0808/0812 6SM -SHRA BKN025 OVC060 FM081200 18008KT P6SM VCSH FEW012 BKN030 FM081700 19011G17KT P6SM VCTS SCT025CB BKN035 FM082300 21007KT P6SM VCSH FEW015 BKN040 FM090800 23004KT 6SM BR VCSH BKN009 OVC015 ='
>> regexp(taf_input,'-?(?:VC|RE|MI|BC|DR|BL|SH|TS|FZ|PR|DZ|RA|SN|SG|IC|PL|GR|GS|UP|BR|FG|FU|DU|SA|HZ|SS|DS){2,}','match')
ans =
1×6 cell array
{'VCSH'} {'-SHRA'} {'VCSH'} {'VCTS'} {'VCSH'} {'VCSH'}