<?php
function parse( $str ) {
function ( $matches ) { return $matches [ 2 ] ? parse( $matches [ 2 ] ) : '' ; } ,
$str
) ;
}
$test_case =
'[b]Test 1[/b]
[b][i]Test 2: nested BBCodes and multiple occurrences of the same one[/i][/b]
[img src="http://e...content-available-to-author-only...e.com/image.png"]
[sup][i]A pretty bird.[/i][/sup]
[p id="malformed]Lorem ipsum[/p] (the end tag also shouldn\'t be removed)
[url="example.com" target="_blank"]New window[/url]
[quote="The other demo"][b]This is in bold.[/b]
[url="http://w...content-available-to-author-only...e.com/"]Link[/url]
[img src="http://w...content-available-to-author-only...e.com/image.png" width="100" height="100"]
[color=red]Darn, no red.[/color ]
[img src="http://w...content-available-to-author-only...e.com/image.png width="100" height="100"]
[sup]^ malformed tag, shouldn\'t match[/sup][/quote]
[p class="note"]Not all of the lines above will match in the same way.[/p]' ;
echo nl2br ( parse
( $test_case ) ) ;
?>
PD9waHAKCmZ1bmN0aW9uIHBhcnNlKCRzdHIpIHsKICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ0BcWyhcdyspKD86PSIoPz4uKj8iKSk/KD86IFx3Kz0iKD8+Lio/IikpKl0oPzooLio/KVxbL1wxXSk/QHMnLAogICAgICAgIGZ1bmN0aW9uKCRtYXRjaGVzKSB7IHJldHVybiAkbWF0Y2hlc1syXSA/IHBhcnNlKCRtYXRjaGVzWzJdKSA6ICcnOyB9LAogICAgICAgICRzdHIKICAgICk7Cn0KCiR0ZXN0X2Nhc2UgPQonW2JdVGVzdCAxWy9iXQpbYl1baV1UZXN0IDI6IG5lc3RlZCBCQkNvZGVzIGFuZCBtdWx0aXBsZSBvY2N1cnJlbmNlcyBvZiB0aGUgc2FtZSBvbmVbL2ldWy9iXQpbaW1nIHNyYz0iaHR0cDovL2UuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuY29tL2ltYWdlLnBuZyJdCltzdXBdW2ldQSBwcmV0dHkgYmlyZC5bL2ldWy9zdXBdCltwIGlkPSJtYWxmb3JtZWRdTG9yZW0gaXBzdW1bL3BdICh0aGUgZW5kIHRhZyBhbHNvIHNob3VsZG5cJ3QgYmUgcmVtb3ZlZCkKW3VybD0iZXhhbXBsZS5jb20iIHRhcmdldD0iX2JsYW5rIl1OZXcgd2luZG93Wy91cmxdCltxdW90ZT0iVGhlIG90aGVyIGRlbW8iXVtiXVRoaXMgaXMgaW4gYm9sZC5bL2JdClt1cmw9Imh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS8iXUxpbmtbL3VybF0KW2ltZyBzcmM9Imh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS9pbWFnZS5wbmciIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIl0KCltjb2xvcj1yZWRdRGFybiwgbm8gcmVkLlsvY29sb3IgXQpbaW1nIHNyYz0iaHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuY29tL2ltYWdlLnBuZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCJdCltzdXBdXiBtYWxmb3JtZWQgdGFnLCBzaG91bGRuXCd0IG1hdGNoWy9zdXBdWy9xdW90ZV0KW3AgY2xhc3M9Im5vdGUiXU5vdCBhbGwgb2YgdGhlIGxpbmVzIGFib3ZlIHdpbGwgbWF0Y2ggaW4gdGhlIHNhbWUgd2F5LlsvcF0nOwoKZWNobyBubDJicihwYXJzZSgkdGVzdF9jYXNlKSk7Cgo/Pg==
stdout
Test 1<br />
Test 2: nested BBCodes and multiple occurrences of the same one<br />
<br />
A pretty bird.<br />
[p id="malformed]Lorem ipsum[/p] (the end tag also shouldn't be removed)<br />
New window<br />
This is in bold.<br />
Link<br />
<br />
<br />
[color=red]Darn, no red.[/color ]<br />
[img src="http://w...content-available-to-author-only...e.com/image.png width="100" height="100"]<br />
^ malformed tag, shouldn't match<br />
Not all of the lines above will match in the same way.
stderr
PHP Notice: Undefined offset: 2 in /home/iBhf6B/prog.php on line 5
PHP Notice: Undefined offset: 2 in /home/iBhf6B/prog.php on line 5