preg_replace внутри preg_match_all проблемы
-
18-09-2019 - |
Вопрос
Я пытаюсь найти некоторые определенные блоки в моем файле данных и заменить что-то внутри них.После этого поместите все это (с замененными данными) в новый файл.Мой код на данный момент выглядит примерно так:
$content = file_get_contents('file.ext', true);
//find certain pattern blocks first
preg_match_all('/regexp/su', $content, $matches);
foreach ($matches[0] as $match) {
//replace data inside of those blocks
preg_replace('/regexp2/su', 'replacement', $match);
}
file_put_contents('new_file.ext', return_whole_thing?);
Теперь проблема в том, что я не знаю, как вернуть_whole_thing .По сути, file.ext и new_file.ext почти одинаковы, за исключением замененных данных.Любое предложение, что должно быть на месте return_whole_thing
?
Спасибо!
Решение
Вероятно, лучше всего усилить ваше регулярное выражение, чтобы найти подшаблон в исходном шаблоне.Таким образом, вы можете просто вызвать preg_replace() и покончить с этим.
$new_file_contents = preg_replace('/regular(Exp)/', 'replacement', $content);
Это можно сделать с помощью "( )" внутри регулярного выражения.Быстрый поиск в Google по запросу "подшаблоны регулярных выражений" привел к это.
Другие советы
Вам даже не нужен preg_replace;поскольку у вас уже есть совпадения, вы можете просто использовать обычную str_replace следующим образом:
$content = file_get_contents('file.ext', true);
//find certain pattern blocks first
preg_match_all('/regexp/su', $content, $matches);
foreach ($matches[0] as $match) {
//replace data inside of those blocks
$content = str_replace( $match, 'replacement', $content)
}
file_put_contents('new_file.ext', $content);
Я не уверен, что понимаю вашу проблему.Не могли бы вы, возможно, опубликовать пример:
- file.ext, исходный файл
- регулярное выражение, которое вы хотите использовать, и то, что вы хотите заменить, совпадают с
- new_file.ext, ваш желаемый результат
Если вы просто хотите почитать file.ext
, замените совпадение регулярных выражений и сохраните результат в new_file.ext
, все , что вам нужно, это:
$content = file_get_contents('file.ext');
$content = preg_replace('/match/', 'replacement', $content);
file_put_contents('new_file.ext', $content);