I don't have much experience at all with patterns and preg_replace so I know I'm doing it wrong. But I'm not sure what the proper syntax should be.
In this instance I'm trying to convert [/b] to from a form submission.
Here's my best attempt, which obviously is incorrect:
$patterns = array();
$patterns[0] = '/[b]/';
$patterns[1] = '/[/b]/';
$patterns[2] = '/[i]/';
$patterns[3] = '/[/i]/';
$patterns[4] = '/[u]/';
$patterns[5] = '/[/u]/';
$replace = array();
$replace[0] = '/<b>/';
$replace[1] = '/</b>/';
$replace[2] = '/<i>/';
$replace[3] = '/</i>/';
$replace[4] = '/<u>/';
$replace[5] = '/</u>/';
$new = preg_replace($patterns, $replace, $string);
This might be done more simply using str_replace()
$search = array('[b]', '[/b]', '[i]', '[/i]');
$replace = array('<b>', '</b>', '<i>', '</i>');
str_replace($search, $replace, $string );
[
and ]
are special charachters in regex so they need to be escaped.i
modifier should be used for the regex and the str_ireplace
should be used in place of str_replace
.Example 1:
$patterns = array();
$patterns[0] = '/\[b\]/';
$patterns[1] = '/\[\/b\]/';
$patterns[2] = '/\[i\]/';
$patterns[3] = '/\[\/i\]/';
$patterns[4] = '/\[u\]/';
$patterns[5] = '/\[\/u\]/';
$replace = array();
$replace[0] = '<b>';
$replace[1] = '</b>';
$replace[2] = '<i>';
$replace[3] = '</i>';
$replace[4] = '<u>';
$replace[5] = '</u>';
$new = preg_replace($patterns, $replace, $string);
If you want it with a regex though use the regex functionality.
$patterns = array();
$patterns[0] = '/\[(\/?)b\]/';
$patterns[1] = '/\[(\/?)i\]/';
$patterns[2] = '/\[(\/?)u\]/';
$replace = array();
$replace[0] = '<$1b>';
$replace[1] = '<$1i>';
$replace[2] = '<$1u>';
$new = preg_replace($patterns, $replace, $string);
or with str_replace...
$patterns = array();
$patterns[0] = '[b]';
$patterns[1] = '[/b]';
$patterns[2] = '[i]';
$patterns[3] = '[/i]';
$patterns[4] = '[u]';
$patterns[5] = '[/u]';
$replace = array();
$replace[0] = '<b>';
$replace[1] = '</b>';
$replace[2] = '<i>';
$replace[3] = '</i>';
$replace[4] = '<u>';
$replace[5] = '</u>';
$new = str_replace($patterns, $replace, $string);
A better regex...
$new = preg_replace('~\[(/?)(b|i|u)\]~', '<$1$2>', $string);