is invalid. Replace it with the valid expression
	$s = str_replace("
","
",$s);
	$s = preg_replace('/\@\{(.+?)\; (.+?)\@(.+?)\}/','@[url=https://$3/u/$2]$1[/url]',$s);
	// Escaping the hash tags - doesn't always seem to work
	// $s = preg_replace('/\#([^\s\#])/','\\#$1',$s);
	// This seems to work
	$s = preg_replace('/\#([^\s\#])/','#$1',$s);
	$s = Markdown($s);
	$s = str_replace('#','#',$s);
	$s = str_replace("\n",'
',$s);
	$s = html2bbcode($s);
//	$s = str_replace('*','*',$s);
	// Convert everything that looks like a link to a link
	$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3]$2$3[/url]',$s);
	//$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3$4]$2$3$4[/url]',$s);
	$s = preg_replace("/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism",'[youtube]$2[/youtube]',$s);
	$s = preg_replace("/\[url\=https?:\/\/www.youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism",'[youtube]$1[/youtube]',$s);
	$s = preg_replace("/\[url\=?(.*?)\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/url\]/ism",'[vimeo]$2[/vimeo]',$s);
	$s = preg_replace("/\[url\=https?:\/\/vimeo.com\/([0-9]+)\](.*?)\[\/url\]/ism",'[vimeo]$1[/vimeo]',$s);
	// remove duplicate adjacent code tags
	$s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s);
	// Don't show link to full picture (until it is fixed)
	$s = scale_external_images($s, false);
	return $s;
}
function stripdcode_br_cb($s) {
	return '[code]' . str_replace('
', "\n\t", $s[1]) . '[/code]';
}
function bb2diaspora($Text,$preserve_nl = false) {
	$ev = bbtoevent($Text);
	// Replace any html brackets with HTML Entities to prevent executing HTML or script
	// Don't use strip_tags here because it breaks [url] search by replacing & with amp
	$Text = str_replace("<", "<", $Text);
	$Text = str_replace(">", ">", $Text);
	// If we find any event code, turn it into an event.
	// After we're finished processing the bbcode we'll 
	// replace all of the event code with a reformatted version.
	if($preserve_nl)
		$Text = str_replace(array("\n","\r"), array('',''),$Text);
	// Set up the parameters for a URL search string
	$URLSearchString = "^\[\]";
	// Set up the parameters for a MAIL search string
	$MAILSearchString = $URLSearchString;
	// Perform URL Search
	// [img]pathtoimage[/img]
	// the following was added on 10-January-2012 due to an inability of Diaspora's
	// new javascript markdown processor to handle links with images as the link "text"
	// It is not optimal and may be removed if this ability is restored in the future
	$Text = preg_replace("/\[url\=([$URLSearchString]*)\]\[img\](.*?)\[\/img\]\[\/url\]/ism", 
		'' . "\n" . '[' . t('link') . '](' . '$1' . ')', $Text);
	$Text = preg_replace("/\[bookmark\]([$URLSearchString]*)\[\/bookmark\]/ism", '[$1]($1)', $Text);
	$Text = preg_replace("/\[bookmark\=([$URLSearchString]*)\](.*?)\[\/bookmark\]/ism", '[$2]($1)', $Text);
	$Text = preg_replace("/\[url\]([$URLSearchString]*)\[\/url\]/ism", '[$1]($1)', $Text);
	$Text = preg_replace("/\#\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[#$2]($1)', $Text);
	$Text = preg_replace("/\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", '[$2]($1)', $Text);
	$Text = preg_replace("/\[img\](.*?)\[\/img\]/", '', $Text);
	$Text = preg_replace("/\[img\=(.*?)\](.*?)\[\/img\]/", '', $Text);
	// Perform MAIL Search
	$Text = preg_replace("(\[mail\]([$MAILSearchString]*)\[/mail\])", '[$1](mailto:$1)', $Text);
	$Text = preg_replace("/\[mail\=([$MAILSearchString]*)\](.*?)\[\/mail\]/", '[$2](mailto:$1)', $Text);
         
	$Text = str_replace('*', '\\*', $Text);
	$Text = str_replace('_', '\\_', $Text);
	$Text = str_replace('`','\\`', $Text);
	// Check for bold text
	$Text = preg_replace("(\[b\](.*?)\[\/b\])is",'**$1**',$Text);
	// Check for Italics text
	$Text = preg_replace("(\[i\](.*?)\[\/i\])is",'_$1_',$Text);
	// Check for Underline text
//	$Text = preg_replace("(\[u\](.*?)\[\/u\])is",'$1',$Text);
	// Check for strike-through text
//	$Text = preg_replace("(\[s\](.*?)\[\/s\])is",'$1',$Text);
	// Check for over-line text
//	$Text = preg_replace("(\[o\](.*?)\[\/o\])is",'$1',$Text);
	// Check for colored text
//	$Text = preg_replace("(\[color=(.*?)\](.*?)\[\/color\])is","$2",$Text);
	// Check for sized text
//	$Text = preg_replace("(\[size=(.*?)\](.*?)\[\/size\])is","$2",$Text);
	// Check for list text
//	$Text = preg_replace("/\[list\](.*?)\[\/list\]/is", '
$1'; // Check for [quote] text $Text = preg_replace("/\[quote\](.*?)\[\/quote\]/is",">$1\n\n", $Text); // Images // html5 video and audio $Text = preg_replace("/\[video\](.*?)\[\/video\]/", '$1', $Text); $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '$1', $Text); // $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/", '', $Text); // [img=widthxheight]image source[/img] // $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/", '