我的数据库中有字符串,如
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个日期括号。
有什么想法吗?
答案 0 :(得分:5)
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])."'>";
}
答案 1 :(得分:1)
您可以使用正则表达式和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]}\">";
};