두 개 이상의 탭이 뒤에 나오는 첫 번째 필드를 제외한 각 필드가 탭으로 구분 된 다음 형식의 문자열을 수정하려고합니다.preg_replace의 교체 배열에있는 특수 (이스케이프 처리 된) 문자가 이스케이프 처리됩니다.
"$str1 $str2 $str3 $str4 $str5 $str6"
수정 된 문자열은 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]);
}
문제는 대체 배열의 이스케이프 문자 (탭과 줄 바꿈)을 대상 문자열에서 탈출 된 상태로 유지하고 나는 다음과 같은 문자열을 얻을.
$data=preg_replace("/\t+/", "\t", $data);
나는 실종 뭔가 :
"\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"
이상하게도, 나는 에 이전 노력이 라인은 작동합니까? 어떤 생각을 고칠 수 있을까요?
(예, 나는에있는 것을 알고있다 문자열이 겹치기 때문에 문자열을 약간 조정할 수 있습니다.) – Synetech