get_shortcode_regex

The timeline below displays how wordpress function get_shortcode_regex has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.5

/**
 * Retrieves the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 * @since 4.4.0 Added the `$tagnames` parameter.
 *
 * @global array $shortcode_tags
 *
 * @param array $tagnames Optional. List of shortcodes to find. Defaults to all registered shortcodes.
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex($tagnames = null)
{
    global $shortcode_tags;
    if (empty($tagnames)) {
        $tagnames = array_keys($shortcode_tags);
    }
    $tagregexp = implode('|', array_map('preg_quote', $tagnames));
    /*
     * WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag().
     * Also, see shortcode_unautop() and shortcode.js.
     */
    // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing bracket for escaping shortcodes: [[tag]].
    // phpcs:enable
}

WordPress Version: 6.3

/**
 * Retrieves the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 * @since 4.4.0 Added the `$tagnames` parameter.
 *
 * @global array $shortcode_tags
 *
 * @param array $tagnames Optional. List of shortcodes to find. Defaults to all registered shortcodes.
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex($tagnames = null)
{
    global $shortcode_tags;
    if (empty($tagnames)) {
        $tagnames = array_keys($shortcode_tags);
    }
    $tagregexp = implode('|', array_map('preg_quote', $tagnames));
    /*
     * WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag().
     * Also, see shortcode_unautop() and shortcode.js.
     */
    // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]].
    // phpcs:enable
}

WordPress Version: 6.1

/**
 * Retrieves the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 * @since 4.4.0 Added the `$tagnames` parameter.
 *
 * @global array $shortcode_tags
 *
 * @param array $tagnames Optional. List of shortcodes to find. Defaults to all registered shortcodes.
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex($tagnames = null)
{
    global $shortcode_tags;
    if (empty($tagnames)) {
        $tagnames = array_keys($shortcode_tags);
    }
    $tagregexp = implode('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag().
    // Also, see shortcode_unautop() and shortcode.js.
    // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]].
    // phpcs:enable
}

WordPress Version: 5.6

/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 * @since 4.4.0 Added the `$tagnames` parameter.
 *
 * @global array $shortcode_tags
 *
 * @param array $tagnames Optional. List of shortcodes to find. Defaults to all registered shortcodes.
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex($tagnames = null)
{
    global $shortcode_tags;
    if (empty($tagnames)) {
        $tagnames = array_keys($shortcode_tags);
    }
    $tagregexp = implode('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag().
    // Also, see shortcode_unautop() and shortcode.js.
    // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]].
    // phpcs:enable
}

WordPress Version: 5.4

/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 * @since 4.4.0 Added the `$tagnames` parameter.
 *
 * @global array $shortcode_tags
 *
 * @param array $tagnames Optional. List of shortcodes to find. Defaults to all registered shortcodes.
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex($tagnames = null)
{
    global $shortcode_tags;
    if (empty($tagnames)) {
        $tagnames = array_keys($shortcode_tags);
    }
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag().
    // Also, see shortcode_unautop() and shortcode.js.
    // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]].
    // phpcs:enable
}

WordPress Version: 5.1

/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 * @since 4.4.0 Added the `$tagnames` parameter.
 *
 * @global array $shortcode_tags
 *
 * @param array $tagnames Optional. List of shortcodes to find. Defaults to all registered shortcodes.
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex($tagnames = null)
{
    global $shortcode_tags;
    if (empty($tagnames)) {
        $tagnames = array_keys($shortcode_tags);
    }
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
    // Also, see shortcode_unautop() and shortcode.js.
    // phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
    // phpcs:enable
}

WordPress Version: 4.7

/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 * @since 4.4.0 Added the `$tagnames` parameter.
 *
 * @global array $shortcode_tags
 *
 * @param array $tagnames Optional. List of shortcodes to find. Defaults to all registered shortcodes.
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex($tagnames = null)
{
    global $shortcode_tags;
    if (empty($tagnames)) {
        $tagnames = array_keys($shortcode_tags);
    }
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
    // Also, see shortcode_unautop() and shortcode.js.
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
}

WordPress Version: 4.4

/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags
 *
 * @param array $tagnames List of shortcodes to find. Optional. Defaults to all registered shortcodes.
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex($tagnames = null)
{
    global $shortcode_tags;
    if (empty($tagnames)) {
        $tagnames = array_keys($shortcode_tags);
    }
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
    // Also, see shortcode_unautop() and shortcode.js.
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
}

WordPress Version: 4.3

/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 *
 * @global array $shortcode_tags
 *
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex()
{
    global $shortcode_tags;
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
    // Also, see shortcode_unautop() and shortcode.js.
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
}

WordPress Version: 3.9

/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5.0
 *
 * @uses $shortcode_tags
 *
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex()
{
    global $shortcode_tags;
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
    // Also, see shortcode_unautop() and shortcode.js.
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
}

WordPress Version: 3.7

/**
 * Retrieve the shortcode regular expression for searching.
 *
 * The regular expression combines the shortcode tags in the regular expression
 * in a regex class.
 *
 * The regular expression contains 6 different sub matches to help with parsing.
 *
 * 1 - An extra [ to allow for escaping shortcodes with double [[]]
 * 2 - The shortcode name
 * 3 - The shortcode argument list
 * 4 - The self closing /
 * 5 - The content of a shortcode when it wraps some content.
 * 6 - An extra ] to allow for escaping shortcodes with double [[]]
 *
 * @since 2.5
 * @uses $shortcode_tags
 *
 * @return string The shortcode search regular expression
 */
function get_shortcode_regex()
{
    global $shortcode_tags;
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join('|', array_map('preg_quote', $tagnames));
    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcode_tag()
    // Also, see shortcode_unautop() and shortcode.js.
    return '\[' . '(\[?)' . "({$tagregexp})" . '(?![\w-])' . '(' . '[^\]\/]*' . '(?:' . '\/(?!\])' . '[^\]\/]*' . ')*?' . ')' . '(?:' . '(\/)' . '\]' . '|' . '\]' . '(?:' . '(' . '[^\[]*+' . '(?:' . '\[(?!\/\2\])' . '[^\[]*+' . ')*+' . ')' . '\[\/\2\]' . ')?' . ')' . '(\]?)';
    // 6: Optional second closing brocket for escaping shortcodes: [[tag]]
}