Замена строки в php - PullRequest
       22

Замена строки в php

1 голос
/ 22 декабря 2010

Я занимаюсь разработкой системы викторин.

Допустим, у меня есть эта строка ..

$my_string = "The language i use is [ans]php[/ans]";

и вывод:

Язык, который я использую: [input name = 'ans' id = 'ans' /] // Текстовое поле кстати

Я использую функцию preg_replace, но не повезло ..

мой код:

$string = 'The quick [j]brown[/j] fox jumped over the lazy dog.';
$patterns = array();
$patterns[0] = '!\[j\]]';
$patterns[1] = '/brown/';
$patterns[2] = '\[/j\]!';
$replacements = array();
$replacements[0] = '';
$replacements[1] = '<input type="text" name="j_1" id="j_1" />';
$replacements[2] = '';
echo preg_replace($patterns, $replacements, $string);

Вывод был:

The quick []<input type="text" name="j_1" id="j_1" /> [/] fox jumped over the lazy dog.

Expectation:

The quick <input type="text" name="j_1" id="j_1" /> fox jumped over the lazy dog.

очень ценю, если вы, ребята, можете помочь ..

Спасибо

Ответы [ 3 ]

0 голосов
/ 22 декабря 2010
$my_string = "The language i use is [ans]php[/ans] and bla bla [o]php[/o]";
$my_html = preg_replace('/\[(.*?)\].*?\[\/.*?\]/msi','<input id="$1" name="$1"/>',$my_string);
echo $my_html;
0 голосов
/ 22 декабря 2010

Попробуйте это:

$my_string = preg_replace('#\[(.*?)\](.*?)\[/\1\]#',
                          '<input type="text" name="\1_1" id="\1_1" />'
                          ,$my_string);

Посмотреть

0 голосов
/ 22 декабря 2010

Это должно работать как вы описали.

$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..)

...