各フィールドがタブで区切られている最初のフィールドを除いて、次のフォームの文字列を変更しようとしています。preg_replaceの置換配列内の特別な(エスケープされた)文字がエスケープされる
変更された文字列には、HTMLテーブルタグで囲まれた各フィールドがあり、それ自体でインデントされた行になります。
"<tr>
<td class="title">$str1</td>
<td sorttable_customkey="$str2"></td>
<td sorttable_customkey="$str3"></td>
<td sorttable_customkey="$str4"></td>
<td sorttable_customkey="$str5"></td>
<td sorttable_customkey="$str6"></td>
</tr>
"
次のようなコードを使用してみました。
$patterns = array();
$patterns[0]='/^/';
$patterns[1]='/\t\t+/';
$patterns[2]='/\t/';
$patterns[3]='/$/';
$replacements = array();
$replacements[0]='\t\t<tr>\r\n\t\t\t<td class="title">';
$replacements[1]='</td>\r\n\t\t\t<td sorttable_customkey="';
$replacements[2]='"></td>\r\n\t\t\t<td sorttable_customkey="';
$replacements[3]='"></td>\r\n\t\t</tr>\r\n';
for ($i=0; $i<count($lines); $i++) {
$lines[$i] = preg_replace($patterns, $replacements, $lines[$i]);
}
問題は、交換配列のエスケープ文字(タブ、改行)はコピー先の文字列にエスケープしたままであることであり、私は次の文字列を取得します。
"\t\t<tr>\r\n\t\t\t<td class="title">$str</td>\r\n\t\t\t<td sorttable_customkey="$str2"></td>\r\n\t\t\t<td sorttable_customkey="$str3"></td>\r\n\t\t\t<td sorttable_customkey="$str4"></td>\r\n\t\t\t<td sorttable_customkey="$str5"></td>\r\n\t\t\t<td sorttable_customkey="$str6"></td>\r\n\t\t</tr>\r\n"
は不思議なことに、私はに早く試してみました。このラインは仕事ん:私は何かを
$data=preg_replace("/\t+/", "\t", $data);
足りませんか?どのようにそれを修正するための任意のアイデア?
(はい、私は私が持っていることを知っていますそれらが重なっているため少し弦を微調整してください。) – Synetech