Есть такой regex,
https://regex101.com/r/5CjEGw/1 который выбирает shortcode из текста, но не выходит выбрать те, что содержат круглые скобки. Как можно поправить?
$re = '/(?P<shortcode>(?:(?:\[))(?P<name>[\w\-]{3,})(?:\s(?P<attrs>[\w\d,\s=\"\'\-\+\#\%\!\~\`\&\.\s\:\/\?\|]+))?(?:\])(?:(?P<content>[\w\d\,\!\@\#\$\%\^\&\*\(\\\\\\\\)\s\=\"\'\-\+\&\.\s\:\/\?\|\<\>]+)(?:\[\/[\w\-\_]+\]))?)/m';
$str = '[attribute name="vid-drevesiny" text_before="(" text_after=")"] [attribute name="vid-drevesiny"] ';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
в итоге рабочие варианты для выделения шорткодов:
1)
$re = '/(?P<shortcode>(?:(?:\[))(?P<name>[\w\-]{3,})(?:\s(?P<attrs>[\w\d,\s=\"\'\-\+\#\%\(\)\!\~\`\&\.\s\:\/\?\|]+))?(?:\])(?:(?P<content>[\w\d\,\!\@\#\$\%\^\&\*\(\\\\\\\\\\\\\\\\)\s\=\"\'\-\+\&\.\s\:\/\?\|\<\>]+)(?:\[\/[\w\-\_]+\]))?)/mu'
2)
$re = '/(?P<shortcode>\[(?P<name>[\w\-]{3,})(?:\s+(?P<attrs>[\w\d,\s="\'\-+#%!~`&.:\/()?|]+))?\](?:(?P<content>[\w\d\s,!@#$%^&*(\\)="\'\-+&.:\/?|<>]+)(?:\[\/[\w\-\_]+\]))?)/mu';