2016-08-03 5 views
0
と別で1行を置き換え

だから私は、テキストファイルを持っているコンテンツルックス、例えば、folowsとして:LaravelまたはPHP

名:「ジョン、

姓: 'ドウ'、

年齢:35

しかし現在の姓がDoeのある場合、私は何が発生することができ、確かなことはわかりません。

そして私はこの姓をもう1つに置き換える必要があります。だから私は何とかファイルを開いて、私が必要とする場所を見つける必要があります(私はそれがSurname: 'で始まり、',で終わることを確かに知っています。そして、これら2つの部分文字列の間の文字列を置き換える必要があります。 。これまでのところ、私はこの

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

試してみた

をしかし、それはとのほとんどすべてを置き換えます。(手動で\を追加nは、実際のファイルはかなり長いですオプションをされていないように改行とを失います) 'Smith'。',の組み合わせがこのファイルではかなり一般的であり、ファイル全体を1つの行に変換するため、

私の問題を解決するにはどうすればよいですか?可能性のある助けを非常に感謝します!

UPD:str_replaceが私の必要とするものですが、最初に現在の姓を取得するためにファイルからSurname: 'Doe',行全体を取得する必要があります。

+0

'[^姓]' '文字Sのurnameのいずれかが含まれていない行にマッチします:「' – apokryfos

+0

をこれにはPHPが適切なツールですか?あなたが* nixでない場合は、sedを使うことができます。また、Webから起動する必要がある場合でも、sedを使ってbashスクリプトを呼び出すことができます。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; 
関連する問題