$str =~ /(##(?:.*\n)*)(?=##|\Z)/g #### $str =~ /(##(?:[^#]+|#[^#])*/g