use strict;
my $str = 'BMD-R1
BMD-R2
BTN-R1
BTN-R1-SW
BTN-R2
BTN-R2-SW
CentralOCS-R1
CentralOCS-R1-SW
CentralOCS-R2
CentralOCS-R2-SW
CentralOCS-SW3
CentralOCS-SW4
CLJ-R1
CLJ-R2
CS-HPOV-MLS1
CS-HPOV-MLS2
CTN-R1
CTN-R2
EKV-OTC-MLS1
GOS-R1
GOS-R2
GVL-R1
GVL-R2
ING-R1
LAW-R1
LCS-R1
LCS-R2
LIV-R1
Mascot_R1
Mascot_R2
Mascot_SW1
Mascot_SW2
Mascot_SW3
MST-R1
MST-R2
MTV-R1
MTV-R2
OSS-FW1 (FO)
OSS-FW1 (Pri)
PEN-R1
PEN-R2
Pitt_R1
ROC-FW1
ROC-HPDM-SW1
ROC-PUB-MLS1
ROC-PUB-MLS2
ROC-RCS-SW
SM-ER-SW1
SM-ER-SW2
SM-FW1 (FO)
SM-FW1 (Pri)
SM-PUB-R1
SM-PUB-R1-SW
SM-PUB-R2
SM-PUB-R2-SW
SM-RCS-R1
SM-RCS-R2
SM-RCS-SW1
SM-RCS-SW2
ST-ER-SW1
ST-ER-SW2
ST-FW1 (FO)
ST-FW1 (Pri)
STM-R1
STM-R2
ST-OSS-MAIN-R1
ST-OSS-MAIN-R2
ST-OSS-PUB-R1
ST-OSS-PUB-R1-SW
ST-OSS-PUB-R2
ST-OSS-PUB-R2-SW
ST-PUB-MLS1
ST-PUB-MLS2
ST-PUB-R1
ST-PUB-R2
ST-RCS-R1
ST-RCS-R2
ST-RCS-SW1
ST-RCS-SW2
TES-SW1
Waterfall_SW1
Waterfall_SW2
Waterfall-R1
Waterfall-R2
WolloFW_R1
WolloFW_R2
WolloFW_SW
WYG-R1
WYG-R2
Wynyard_R1
Wynyard_R2
';
my $regex = qr/^(?<location>[A-Za-z]+)[-_][A-Z]{1,2}\d/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html