$re = '/{(}?)(theshortcode)(?![\w-])([^}\/]*(?:\/(?!})[^}\/]*)*?)(?:(\/)}|}(?:([^{]*+(?:{(?!\/\2})[^{]*+)*+){\/\2})?)(}?)/s';
$str = '<div id="lipsum">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin pellentesque lectus tellus, ut tincidunt orci posuere non. Aliquam erat volutpat. Phasellus in lobortis dolor, porta varius nunc. Ut et felis rutrum, pharetra mi a, ullamcorper purus. In vitae fringilla velit. In nec scelerisque mauris, sed eleifend urna. Duis feugiat risus et arcu eleifend venenatis.
</p>
<p>
{theshortcode shortcode="codeone"}
{theshortcode shortcode="anothercode"|param="test"}
{column}column 1{/column}
{/theshortcode}
</p>
<p>
Duis quis nisl fringilla, porttitor tellus a, congue mauris. Sed posuere erat vel metus egestas, eget lobortis dolor pretium. Proin iaculis pharetra consectetur. Sed in enim ultricies, sagittis nisl vitae, porttitor libero. Praesent ut erat nisi. Maecenas luctus magna lacus. Mauris ullamcorper maximus arcu et tincidunt. Aenean cursus enim blandit, scelerisque ex sed, vestibulum felis. In magna massa, sagittis in eleifend vel, tristique vitae nisi.
</p>
<p>
Curabitur ornare venenatis nisl, nec iaculis turpis posuere vestibulum. Aliquam euismod luctus turpis, nec cursus lorem blandit sed. Suspendisse fermentum diam urna, eu fermentum velit venenatis in. Praesent ultrices eleifend elit dapibus molestie. Sed interdum risus id eros aliquam, quis fermentum ante egestas. Morbi condimentum aliquam malesuada. Praesent sodales ipsum in eros pretium sodales.
</p>
<p>
Curabitur porta venenatis consequat. Quisque sed mi mauris. Quisque porta est ac eleifend sollicitudin. Maecenas tincidunt pulvinar nibh a molestie. Morbi eros sem, egestas eget nunc vel, vulputate pharetra eros. Maecenas porta erat ligula, in pellentesque augue pulvinar nec. Aenean rutrum urna eu quam laoreet suscipit. Phasellus placerat malesuada posuere. Nulla aliquet a nisi vehicula aliquet. Sed pretium purus eget mi volutpat lacinia. Donec enim tortor, tincidunt quis metus a, molestie commodo eros.
</p>
<p>
Fusce feugiat ac mi at sodales. Proin vel molestie mauris. Phasellus nisi libero, mollis sed imperdiet a, sagittis at odio. Mauris nec diam quis quam tempor lacinia quis et lacus. Sed et consectetur nunc. Integer a malesuada sem. Mauris a sollicitudin lectus, ut auctor ligula. Duis tempor scelerisque metus in consequat.
</p></div>';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php