use strict;
my $str = '[ar:胡彦斌]
[ti:月光]
[00:00.86]月光(秦时明月主题曲)
[00:06.31]歌手 胡彦斌
[00:08.68]作词 林文炫
[00:10.49]作曲 胡彦斌
[00:20.11]月光色
[00:22.30]女子香
[00:24.51]泪断剑
[00:26.70]情多长
[00:28.95]有多痛
[00:30.97]无字想
[00:33.35][00:33.35]忘了你
[00:39.43]孤单魂
[00:41.51]随风荡
[00:43.57]谁去笑
[00:45.87]痴情郎
[00:48.03]这红尘的战场
[00:52.95]千军万马有谁能称王
[01:01.69]过情关
[01:06.00]谁敢闯
[01:10.42]望明月
[01:15.62]心悲凉
[01:19.13]千古恨
[01:23.45]轮回尝
[01:27.76]眼一闭
[01:32.71]谁最狂
[01:38.90]这世道的无常
[01:43.23]注定敢爱的人一生伤
[02:07.33]月光色
[02:09.20]女子香
[02:11.49]泪断剑
[02:13.58]情多长
[02:15.80]有多痛
[02:17.87]无字想
[02:20.23]忘了你
[02:26.21]孤单魂
[02:28.20]随风荡
[02:30.56]谁去笑
[02:32.64]痴情郎
[02:34.94]这红尘的战场
[02:39.70]千军万马有谁能称王
[02:48.65]过情关
[02:52.66]谁敢闯
[02:57.34]望明月
[03:02.44]心悲凉
[03:05.97]千古恨
[03:09.99]轮回尝
[03:14.67]眼一闭
[03:19.95]谁最狂
[03:30.06]过情关
[03:34.34]谁敢闯
[03:38.78]望明月
[03:43.92]心悲凉
[03:47.58]千古恨
[03:51.50]轮回尝
[03:55.96]眼一闭
[04:01.51]谁最狂
[04:07.21]这世道的无常
[04:21.34]注定敢爱的人一生伤';
my $regex = qr/^((?:\[.+?:.*?\])+)(.*)$/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