WordPress: Problem with the shortcode regex

Posted by peroyomas on Stack Overflow See other posts from Stack Overflow or by peroyomas
Published on 2010-04-01T22:58:33Z Indexed on 2010/04/01 23:03 UTC
Read the original article Hit count: 477

Filed under:
|
|

This is the regular expression used for "shortcodes" in WordPress (one for the whole tag, other for the attributes).

return '(.?)\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)'; $pattern = '/(\w+)\s*=\s*"([^"]*)"(?:\s|$)|(\w+)\s*=\s*\'([^\']*)\'(?:\s|$)|(\w+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/';

It parses stuff like

[foo bar="baz"]content[/foo]

or

[foo /]

In the WordPress trac they say it's a bit flawed, but my main problem is that it don't support shortcodes inside the attributes, like in

[foo bar="[baz /]"]content[/foo]

because the regex stops the main shortcode at the first appearance of a closing bracket, so in the example it renders

[foo bar="[baz /]

and

"]content[/foo]

shows as it is.

Is there any way to change the regex so it bypass any ocurrence of [ with ] and its content when occurs between the opening tag or self-closing tag?

© Stack Overflow or respective owner

Related posts about Wordpress

Related posts about regex