I have a snippet in a message, something like this: [message]sometext.moretext@.text[message] Code (markup): I want that to output as: I can not comprehend the regex I would have to use to get that working, since it must only work between [message]and[/message] tags. Thanks, BP
$text="[message]sometext.moretext@.text[message]"; preg_match("/\[message\](.*?)\[message\]/i",$text,$result); $mix_search= array('.', '@'); $mix_replace= array('[dot]', '[at]'); $output = str_replace($mix_search, $mix_replace, $result[1]); Finish
<?php function friendly_emails( $text ) { if( preg_match_all( '~\[message\](.[^\[]+)\[/message]~si', $text, $emails ) > 0 ) { for( $i = 0; $i < count( $emails[0] ); $i++ ) { $text = str_replace ( $emails[0][$i], preg_replace ( array( '~@~', '~\.~' ), array( '[at]', '[dot]' ), $emails[1][$i] ), $text ); } } return $text ; } $document =<<<HEREDOC email me @ [message]my@email.com[/message], .'s outside of [message] tag not touched ... HEREDOC; echo friendly_emails( $document ); ?> PHP: