jxrd Posted May 30, 2009 Share Posted May 30, 2009 Hello, I'm trying to match urls to wrap them with bbcode tags. I have this working: <?php $s = 'http://www.site.co.uk/page.php?action=something'; echo preg_replace('/(http\:\/\/|www\.)+([a-z0-9-_]+)\.(.*?)$/', '[url]http://www.$2.$3[/url]', $s); ?> However, I wish to only match urls which don't already have url tags around them already. I've tried stuff like this: <?php $s = 'http://www.site.co.uk/page.php?action=something'; echo preg_replace('/(^\[url\])(http\:\/\/|www\.)+([a-z0-9-_]+)\.(.*?)$(^\[\/url\])/', '[url]http://www.$3.$4[/url]', $s); ?> But I can't seem to get it to work. It's probably something really simple. Any help would be awesome. Quote Link to comment Share on other sites More sharing options...
.josh Posted May 31, 2009 Share Posted May 31, 2009 sounds like a job for positive/negative lookahead/lookbehind/lookaround. Quote Link to comment Share on other sites More sharing options...
jxrd Posted May 31, 2009 Author Share Posted May 31, 2009 Nice one - I never even knew they existed. End product: preg_replace('/^(?!\[url.*?\](\s)?)(http\:\/\/|www\.)+([a-z0-9-_]+)\.(.*?)$/', '[url]http://www.$4.$5[/url]', $code); Oh hey, I just noticed a bug for you - The exact same code i put up there, but in php tags will look like this: (attempts to convert my url into bbcode despite the fact that it's in code tags) preg_replace('/^(?!\[url.*?\](\s)?)(http\:\/\/|www\.)+([a-z0-9-_]+)\.(.*?)$/', '[url=http://www.$4.$5]http://www.$4.$5[/url]', $code); Just thought I'd let you know. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.