use strict;
my $str = '[ AutoCAD - Thu Sep 03 15:59:09 2020 ]----------------------------------------
Command: LIST
Select objects: Specify opposite corner: 468 found
Select objects:
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal
BLOCK REFERENCE Layer: "layer1"
Space: Model space
Handle = 12345
Block Name: "Block"
at point, X=1378.4556 Y=1314.2124 Z= 0.0000
X scale factor: 16.5000
Y scale factor: 16.5000
rotation angle: 160.67
Z scale factor: 266.0000
Scale uniformly: No
Allow exploding: Yes
ATTRIBUTE Layer: "layer1"
Space: Model space
Handle = 12345
Style = "STANDARD"
Annotative: No
Font file = default.shx
substituted by default.shx
start point, X=1365.1222 Y=1319.6510 Z= 0.0000
height 3.0000
value 2999
tag THINGY
rotation angle 340.67
width scale factor 1.0000
obliquing angle 0.00
flags normal
generation normal';
my $regex = qr/(?<=at point, )(X=(?:\d|\.)+) +\K(Y=(?:\d|\.)+).*?\K(value \w+)\R +\K(tag \w+)\K/msp;
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