Source 
  File: wp-includes/shortcodes.php 
 function do_shortcode( $content, $ignore_html = false ) {
	global $shortcode_tags;
	if ( false === strpos( $content, '[' ) ) {
		return $content;
	}
	if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) {
		return $content;
	}
	// Find all registered tag names in $content.
	preg_match_all( '@\[([^<>&/\[\]\x00-\x20=]++)@', $content, $matches );
	$tagnames = array_intersect( array_keys( $shortcode_tags ), $matches[1] );
	if ( empty( $tagnames ) ) {
		return $content;
	}
	$content = do_shortcodes_in_html_tags( $content, $ignore_html, $tagnames );
	$pattern = get_shortcode_regex( $tagnames );
	$content = preg_replace_callback( "/$pattern/", 'do_shortcode_tag', $content );
	// Always restore square braces so we don't break things like <!--[if IE ]>.
	$content = unescape_invalid_shortcodes( $content );
	return $content;
}