У меня есть строка в моей базе данных, например
Label is {input:inputvalue} and date is {date:2013-2-2}
Как я могу извлечь входные и входные значения из первой скобки, а также дату и 2013-2-3 из второй фигурной скобки и т. Д.? Таким образом,
Label is <input name="input" value="input_value"> and date is <input name="date" value="2013-2-2">
Функция ниже работает только в том случае, если строка имеет {input} или {date}
function Replace_brackets($rec){ $arr = array(" <input name="input" value='input'> ", " <input name="date" value='date'> "); $arr1 = array('{input}','{date}'); $itemvalue=str_replace($arr1,$arr,$rec); return $itemvalue; }
В тексте может быть больше или меньше фигурных скобок, таких как 2 входных скобки и 4 привязки даты.
Есть идеи?
preg_replace () с обратными ссылками будет работать в этом случае http://php.net/manual/en/function.preg-replace.php :
<?php $s = "Label is {input:inputvalue} and date is {date:2013-2-2}"; print preg_replace( "/{([^:}]*):?([^}]*)}/", "<input name='\\1' value='\\2'>", $s ); ?>
Или, если вам нужно проанализировать пары имени и значения, как указывал @Jack, вы можете использовать версию preg_replace_callback () (вам действительно не нужно использовать htmlspecialchars () для значений атрибутов. Замените htmlspecialchars () на что угодно функция разбора применима):
print preg_replace_callback( "/{([^:}]*):?([^}]*)}/", "generate_html", $s ); function generate_html( Array $match ) { return "<input name='".htmlspecialchars($match[1])."' value='".htmlspecialchars($match[2])."'>"; }
Вы можете использовать регулярное выражение и функцию preg_replace_callback
preg_replace_callback('~(\\{[^}]+\\})~', $callback, $subject);
где subject – ваш текст и обратный вызов – функция, которая передает данную входную строку и возвращает вашу замену
для простых выражений вы можете использовать следующий пример, но это может быть преобразовано в одно preg_replace (без обратного вызова)
$callback = function($string) { preg_match('~\\{([^:]):(.*)\\}~', $string, $m); return "<input name=\"{$m[1]}\" value=\"{$m[2]}\">"; };