2016-08-03 2 views
0

Так что я текстовый файл, который выглядит контент, например, как folows:Заменить одну строку с другой с Laravel или PHP

Название: 'Джон',

Фамилия: 'Doe',

Возраст: 35

Но я не знаю точно, если текущая фамилия Doe все, что могло быть сгенерированы там.

И Мне нужно заменить эту фамилию на другую. Поэтому мне нужно как-то открыть файл, найти нужное место (я точно знаю, что он начинается с Surname: ' и заканчивается ',, и мне нужно заменить строку между этими двумя подстроками, независимо от того, что было до этого, без нарушения структуры файла (теряя разрывы строк и так далее, фактический файл довольно долго, так что добавление \ п вручную не вариант)

до сих пор я пытался это

$content = file_get_contents('text.txt'); 
$search = "/[^Surname: '](.*)[^',]/"; 
$replace = 'Smith'; 
$content = preg_replace($search,$replace,$content); 
file_put_contents('text.txt', $content); 

Но он заменяет почти все с. «Смит», потому что комбинация ', довольно распространена в этом файле, а также превращает весь файл в одну строку.

Итак, что я мог сделать, чтобы решить мою проблему? Был бы очень признателен за любую возможную помощь!

UPD: str_replace может быть тем, что мне нужно, но сначала мне нужно извлечь всю строку Surname: 'Doe', из файла, чтобы получить текущую фамилию.

+0

'[^ Фамилия]' будет соответствовать строка, которая не содержит какой-либо из символов 'S urname:«' – apokryfos

+0

Является ли php правильным инструментом для этого? Если вы no * nix, вы можете использовать sed, или даже если вам нужно запустить его из Интернета, вы можете вызвать скрипт bash с помощью sed http://brunolinux.com/02-The_Terminal/Find_and%20Replace_with_Sed.html – rypskar

ответ

4

Я хотел бы использовать регулярное выражение /^Surname: '.*',$/m, основанный на описании и заменить его Surname: 'Smith',.

Код:

<?php 
$content = file_get_contents('text.txt'); 
$search = "/^Surname: '.*',$/m"; 
$replace = "Surname: 'Smith',"; 
$content = preg_replace($search, $replace, $content); 
file_put_contents('text.txt', $content); 

Демо:

$ cat text.txt 
Name: 'John', 
Surname: 'Doe', 
Age: 35 
$ php a.php 
$ cat text.txt 
Name: 'John', 
Surname: 'Smith', 
Age: 35 
+0

да, именно то, что мне нужно! большое спасибо! – Coffee

0

Это регулярное выражение должно помочь:

"/Surname: '(.*)'/" 
0
$text = "Name: 'John', 

Surname: 'Doe', 

Age: 35"; 

$search = "/Surname:\s+'(.*?)',/is"; 
$replace = 'Surname: \'Smith\','; 
$content = preg_replace($search, $replace, $text); 
echo $content; 
Смежные вопросы