Outputting the blogposts or the_content()

Post content is stored as a single block of data in the *_posts table in the post_content column. It isn’t divided up into sections, so what you want is tricky at best.

What the the_content functions does is take that block of data from the database, runs one or more filters on it that alter the data and prints the result to the screen. You could in principle create and use one of these filters to break up your content.

First, if you are hard-coding blockquotes into the post body, why not just avoid the hassle and write in your <div>s? I don’t see the point of creating <blockquote id="section1">first</blockquote> only to convert it to <div id="first">.. </div>

But if you must, this should get you pretty close…

global $replace_counter;
$replace_counter = 0;
function replace_bquotes($match) {
  if (!empty($match)) {
    global $replace_counter;
    $replace_counter++;
    return '<div id="div-'.$replace_counter.'">'.$match[1].'</div>';
  }
}
function grab_blockquotes($content) {
  $pattern = '/<blockquote[^>]*>(.+)<\/blockquote>/';
  $content = preg_replace_callback($pattern,'replace_bquotes',$content);
  return $content;
}
add_filter('the_content','grab_blockquotes',1);

It occurs to me that you are trying to use blockquotes in a way that seems like you are treating them as shortcodes. I would suggest actually using a shortcode.

function div_maker($atts,$content) {
  $id = '';
  if (isset($atts['id'])) {
    $id = 'id="'.esc_attr($atts['id']).'"';
  }
  return '<div '.$id.'>'.$content.'</div>';
}
add_shortcode('dm','div_maker');

Now you can create your <div>s with [dm id="first"]First Content[/dm]. That is less typing, and should be much more robust. Parsing HTML with regex, as in the first block of code, is not simple and is easy to get wrong.