my $test = q{asdfas dfas dfas df asfd[[bad tag]] [[table]] asdfa sf as [[asdf as f\|sfds]] as dfa sdf [[test new line]] foo}; while ($test =~ m{\[\[([^\[]+)\]\]}g) { print "FOO:<$1>\n"; } #output - same as required in OP FOO: FOO: FOO: FOO: