use strict;
my $str = 'Value
Val
ABCDE
ACCS
ALLY
ALWY
AMBL
APP
ARC
ARTL
ARTY
AV
BA
BEND
BWLK
BVD
BR
BRAE
BRK
BROW
BYPA
BYWY
CSWY
CTR
CH
CIR
CCT
CRCS
CL
CON
CPS
CNR
CT
CTYD
COVE
CR
CRST
CRSS
CSAC
CUTT
DALE
DIP
DR
DVWY
EDGE
ELB
END
ENT
ESP
EXP
FAWY
FOLW
FTWY
FORM
FWY
FRTG
GAP
GDNS
GTE
GLDE
GLEN
GRA
GRN
GR
HTS
HIRD
HWY
HILL
INTG
JNC
KEY
LANE
LNWY
LINE
LINK
LKT
LOOP
MALL
MNDR
MEWS
MTWY
NOOK
OTLK
PDE
PWY
PASS
PSGE
PATH
PWAY
PIAZ
PLZA
PKT
PNT
PORT
PROM
QDRT
QYS
RMBL
REST
RTT
RDGE
RISE
RD
RTY
RTE
ROW
RUE
SVWY
SHUN
SPUR
SQ
ST
SBWY
TARN
TCE
THFR
TLWY
TOP
TOR
TRK
TRL
TURN
UPAS
VALE
VIAD
VIEW
VSTA
WALK
WKWY
WHRF
WYND
';
my $regex = qr/^(?=[A-Z]{1,4}\b)
# Notice the matches below that don't fully match if these are NOT in reverse order:
(ACCS|ALLY|ALWY|AMBL|APP|ARC|ARTL|ARTY|AV|BA|BEND|BWLK|BVD|BR|BRAE|BRK|BROW|BYPA|BYWY|CSWY|CTR|CH|CIR|CCT|CRCS|CL|CON|CPS|CNR|CT|CTYD|COVE|CR|CRST|CRSS|CSAC|CUTT|DALE|DIP|DR|DVWY|EDGE|ELB|END|ENT|ESP|EXP|FAWY|FOLW|FTWY|FORM|FWY|FRTG|GAP|GDNS|GTE|GLDE|GLEN|GRA|GRN|GR|HTS|HIRD|HWY|HILL|INTG|JNC|KEY|LANE|LNWY|LINE|LINK|LKT|LOOP|MALL|MNDR|MEWS|MTWY|NOOK|OTLK|PDE|PWY|PASS|PSGE|PATH|PWAY|PIAZ|PLZA|PKT|PNT|PORT|PROM|QDRT|QYS|RMBL|REST|RTT|RDGE|RISE|RD|RTY|RTE|ROW|RUE|SVWY|SHUN|SPUR|SQ|ST|SBWY|TARN|TCE|THFR|TLWY|TOP|TOR|TRK|TRL|TURN|UPAS|VALE|VIAD|VIEW|VSTA|WALK|WKWY|WHRF|WYND)/mxp;
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