Это должно работать как вы описали.
$string = 'The quick [j]brown[/j] fox jumped over the lazy dog.';
$string = preg_replace('/\[j\](.*)\[\/j\]/', '<input type="text" name="j_1" id="j_1" />', $string);
print $string;
Вы также можете получить доступ ко всему, что заменяется между тегами, используя $1
в строке замены для примера выше.
Если вы хотите запустить другое preg_replace, чтобы получить ответ, вы должны сделать что-то вроде этого:
$string = 'The quick [j]brown[/j] fox jumped over the lazy dog.';
$answer = preg_replace('/(.*)\[j\](.*)\[\/j\](.*)/', '$2', $answer);
print $answer;
Причина, по которой вы используете $2
, заключается в том, что это второе совпадение строки. (Обратите внимание, что существует три (.*)
, каждый из которых соответствует чему-то. Итак, $1
будет равно The quick
, $2
будет равно brown
, а $3
будет равно fox jumped over the lazy dog.
.)