PHP: $tmp = preg_replace('/\s+/', '', $input); $result = str_replace($search, $replace, $tmp); echo $result; На одном форуме скинули это, но как использовать --- Добавлено --- Наверно да, может я не так объясняю
Попробуйте просто скопировать те символы в буфер обмена и вставить их в значения массивов выше. после \r\n и \n
А что если сделать так: ...[(12... ...34)] Можно найти значение между [( и )] если они на разных строках? --- Добавлено --- Вы можете помочь или вы просто просите файл, который я использую? Откройте любой EXE файл в HEX редакторе и вы увидите, что длинные строки переносятся на следующую, если не влазят, так вот как найти целую строку включая ту которая перенеслась на новую
Мне надо на PHP Для автоматизации так сказать.. Не буду же я постоянно лезть в HEX редактор, чтобы что-то изменить в файле.
Видите-ли, найти, по большому счету все искомые варианты разрыва искомой строки не так уж и сложно. Проблема заменить её на строку замены, с тем же набором разделяющих символов. Тоже, в принципе решаемо. Но скрипт потребует отладки. Буквально на каждом шагу. Дистанционно я вряд ли смогу чем-то вам помочь.
Ладно, спасибо. Можно в принципе по одному символу заменять, но будет ломаться файл, потому что он найдёт все похожие символы и заменит.. Крч не знаю. --- Добавлено --- Хотя вроде-бы нашел рабочее решение методом перебора всего подряд.
Алгоритм примерно следующий. Найти все вхождения искомой строки с разрывом управляющими символами после первой цифры искомого числа. Они будут в виде массива. Перебрать их с заменой только одного символа(последнего в вашем примере) в отдельный массив. И оба массива передать функции preg_replace() Повторить для следующей комбинации, и дальше. Как-то так.
Вариант: PHP: // возможные варианты разделения, для демонстрации. $arr = ['71647A59', <<< EOT 71647A 59 EOT, <<< EOT 7164 7A59 EOT, <<< EOT 71 647A59 EOT, ]; //$pattern = '~71(\n*)64(\n*)7A(\n*)59~m'; // шаблон проверки $replacement_pieces = str_split('71647A58', 2); foreach ($arr as $subject) { $str = str_replace("\n", '', $subject); $pieces = str_split($str, 2); $pattern = '~' . implode('(\n?)', $pieces) . '~'; $matches = []; $foo = preg_match($pattern, $subject, $matches); $replacement = reset($replacement_pieces); for($i = 1, $cnt = count($matches); $i < $cnt; $i++) { if(strlen($matches[$i])) { $replacement .= "\n"; } $replacement .= next($replacement_pieces); } var_dump("subj: $subject, pattern: $pattern, replacement: $replacement"); } ?
Можешь это в мой пример засунуть? А то я не очень хорошо понимаю PHP, ты так много написал Он на первой странице вначале темы
PHP: $raw = file_get_contents('1.bin'); $hex = bin2hex($raw); $hex_new = '71647A58'; $hex = replace_hex_with_nl($hex, $hex_new); $raw = hex2bin($hex); file_put_contents('1.bin', $raw); function replace_hex_with_nl($subject, $replacement) { $replacement_pieces = str_split($replacement, 2); $str = str_replace("\n", '', $subject); $pieces = str_split($str, 2); $pattern = '~' . implode('(\n?)', $pieces) . '~'; $matches = []; $foo = preg_match($pattern, $subject, $matches); $replacement = reset($replacement_pieces); for($i = 1, $cnt = count($matches); $i < $cnt; $i++) { if(strlen($matches[$i])) { $replacement .= "\n"; } $replacement .= next($replacement_pieces); } return $replacement; }
Вот только куда пропала заменяемая строка? Мне надо не весь файл переведённый в HEX заменить, а одну строку в нем 71647A59 эту строку на эту 71647A58
Да, о чём-то не о том думал, когда составлял алгоритм Вот: PHP: $raw = file_get_contents('1.bin'); $hex = bin2hex($raw); $subject = '71647A59'; $replacement = '71647A58'; $replacement_info = getReplacementInfo($subject, $replacement); $hex = preg_replace($replacement_info['pattern'], $replacement_info['repl'], $hex); $raw = hex2bin($hex); file_put_contents('1.bin', $raw); function getReplacementInfo($subject, $replacement) { $subject_pieces = str_split($subject, 2); $replacement_pieces = str_split($replacement, 2); $aResult = []; for ($i = 0, $cnt = count($subject_pieces); $i < $cnt; $i++) { for ($j = 0; $j < $cnt; $j++) { if (isset($aResult['pattern'][$j])) { $aResult['pattern'][$j] .= $subject_pieces[$i]; } else { $aResult['pattern'][$j] = "/" . $subject_pieces[$i]; } if (isset($aResult['repl'][$j])) { $aResult['repl'][$j] .= $replacement_pieces[$i]; } else { $aResult['repl'][$j] = $subject_pieces[$i]; } if ($j == $i + 1) { $aResult['pattern'][$j] .= "\n"; $aResult['repl'][$j] .= "\n"; } if ($i == $cnt - 1) { $aResult['pattern'][$j] .= "/"; } } } return $aResult; }