use strict;
my $str = '2-05-13 15:31:48.253 StockSpy Realtime Stocks Quote[5353:207339] Websocket: symbols: ({change = "0.5250015";changePercent = "1.49701"; dayVolume = 16608364; exchange = NYQ; id = BAC; marketHours = 1; price = "35.595"; priceHint = 4;quoteType = 8; time = 3304904610000})2022-05-13 15:31:48.256 StockSpy Realtime Stocks Quote[5353:207339] Websocket: Streamer Prices Updat2022-05-13 15:31:48.256 StockSpy Realtime Stocks Quote[5353:207343] refreshG2022-05-13 15:31:48.267 StockSpy Realtime Stocks Quote[5353:207339] webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message: CgReREpJFRSv+0YY8MCp3ZdgKgNESkkwCTgBRb2+wz9ItLvjWGWAnvJD2A2022-05-13 15:31:48.267 StockSpy Realtime Stocks Quote[5353:207339] Websocket: symbols: ( { change = "485.2383"; changePercent = "1.529258"; dayVolume = 186178996; exchange = DJI; id = "^DJI"; marketHours = 1; price = "32215.54"; priceHint = 4; quoteType = 9; time = 3304904614000})';
my $regex = qr/symbols: *\( *{[^}]+}\)/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