get_shortcode_regex

函数


get_shortcode_regex ( $tagnames = null )
参数
  • (array)
    $tagnames
    Optional. List of shortcodes to find. Defaults to all registered shortcodes.
    Required:
    Default: null
返回值
  • (string) The shortcode search regular expression
定义位置
  • wp-includes/shortcodes.php
    , line 258
引入
2.5.0
弃用

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 [[]]

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 '['                             // Opening bracket.
		. '([?)'                           // 1: Optional second opening bracket for escaping shortcodes: [[tag]].
		. "($tagregexp)"                     // 2: Shortcode name.
		. '(?![w-])'                       // Not followed by word character or hyphen.
		. '('                                // 3: Unroll the loop: Inside the opening shortcode tag.
		.     '[^]/]*'                   // Not a closing bracket or forward slash.
		.     '(?:'
		.         '/(?!])'               // A forward slash not followed by a closing bracket.
		.         '[^]/]*'               // Not a closing bracket or forward slash.
		.     ')*?'
		. ')'
		. '(?:'
		.     '(/)'                        // 4: Self closing tag...
		.     ']'                          // ...and closing bracket.
		. '|'
		.     ']'                          // Closing bracket.
		.     '(?:'
		.         '('                        // 5: Unroll the loop: Optionally, anything between the opening and closing shortcode tags.
		.             '[^[]*+'             // Not an opening bracket.
		.             '(?:'
		.                 '[(?!/2])' // An opening bracket not followed by the closing shortcode tag.
		.                 '[^[]*+'         // Not an opening bracket.
		.             ')*+'
		.         ')'
		.         '[/2]'             // Closing shortcode tag.
		.     ')?'
		. ')'
		. '(]?)';                          // 6: Optional second closing brocket for escaping shortcodes: [[tag]].
	// phpcs:enable
}