0

データベースに次のような文字列があります

Label is {input:inputvalue} and date is {date:2013-2-2}

最初のブレースから input と inputvalue を抽出し、2 番目のブレースから date と 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 つの日付中かっこなど、テキストには多かれ少なかれ中かっこがある場合があります。

何か案は?

4

2 に答える 2

6

この場合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])."'>";
}
于 2013-02-14T23:31:17.570 に答える
1

正規表現と preg_replace_callback 関数を使用できます

preg_replace_callback('~(\\{[^}]+\\})~', $callback, $subject);

ここで、件名はテキストであり、指定された入力文字列を処理して置換を返す関数をコールバックします

単純な式の場合、次の例を使用できますが、これは単一の preg_replace (コールバックなし) に変換できます。

$callback = function($string) {
    preg_match('~\\{([^:]):(.*)\\}~', $string, $m);
    return "<input name=\"{$m[1]}\" value=\"{$m[2]}\">";
};
于 2013-02-14T23:29:17.870 に答える