Text as follows:web
(1+2(123+(888)3)ddf)wwww(sdf(sdfdsf)gggg)sql
Match:ide
1+2 123+ 888 3 ddf sdf sdfdsf ggggspa
- #!/usr/bin/perl
- use strict;
- use warnings;
- use re 'eval';
- my $str= '(1+2(123+(888)3)ddf)wwww(sdf(sdfdsf)gggg)';
- my @arr;
- my $re = qr/(?{local $a=0})(?>(?:([^()]+)(?{push @arr,$1})| #將匹配到得內容push到@arr
- #固化分組,減小回朔。
- \((?{$a++})| #遇到開括號$a+1
- \)(?(?{$a!=0})(?{$a--})| #若是$a不等於0則遇到閉括號$a-1
- (?!)))*)(?(?{$a!=0})(?!))/x; # 不然繼續匹配,若是繼續遇到$a不等於0 繼續匹配到行尾
- 1 while($str =~ /\($re\)/g);
- print join("\n",@arr);