2017-07-05 17 views
0

私はコンテンツとTXTファイルがあります。しかし、それは正確に何を動作しませんファイル形式にpreg_replaceでのみ特定のグループを交換し

write_file('tekst.txt', preg_replace('/\$config\[\'website\'] = \'(.*)\';/', 'aaaaaa', file_get_contents('tekst.txt'))); 

を:ファイル内にpreg_replaceで交換するための

fggfhfghfghf 

$config['website'] = 'Olpa'; 


asdasdasdasdasdas 

そして、PHPスクリプトを私はそれが働きたい。

このスクリプトはマッチ全体を交換し、変更後に、それはこのようになりますので:

fggfhfghfghf 

aaaaaa 


asdasdasdasdasdas 

そして、それは悪いです。

私が欲しいのは、全体のマッチ$config['website'] = 'Olpa';を変更しないようにしかし、あなたはそれが試合情報のグループ2にない属して見ることができるようにちょうどこのOlpa

enter image description here

を変更することです。

私が望むのは、このグループ2を1つだけ変更することです。あなたは保つ(その後、復元するために、後方参照を使用するために必要なものをキャプチャし、あなたのpreg_replaceそれは意味

preg_replace('/(\$config\[\'website\'] = \').*?(\';)/', '$1aaaaaa$2', file_get_contents('tekst.txt')) 

にを変更する必要が

fggfhfghfghf 

$config['website'] = 'aaaaaa'; 


asdasdasdasdasdas 

答えて

3

:最後にスクリプトの後、それは次のようになりますする

テキスト)と置き換えてください。

regex demoを参照してください。

パターンは詳細:

  • (\$config\[\'website\'] = \') - グループ1(後$1とを基準にして)リテラル$config['website'] = 'サブ
  • .*?キャプチャ -
  • できるだけ少ないように改行文字以外の任意の0+文字を
  • (\';) - グループ2:'の後に;(後で$2と参照)

aaaが実際に数字で始まる場合は、逆参照${1}が必要です。

2

私は、より優れた、より速く、よりリーンなソリューションを提供しています。否定文字クラスと組み合わせて、この([^']+が)が得られる、\$config\['website'] = '\K[^']+

\K「ここfullstringの試合を開始」意味:

パターン:キャプチャグループが必要とされているいいえ、それは、単一引用符をエスケープする細心の注意が必要としません捕獲グループの省略。

Pattern Demo(わずか25ステップ)

PHP実装:$configが変数として解釈されないようにパターンの周りに単一引用符を使用し

$txt='fggfhfghfghf 

$config[\'website\'] = \'Olpa\'; 


asdasdasdasdasdas'; 
print_r(preg_replace('/\$config\[\'website\'\] = \'\K[^\']+/','aaaaaa',$txt)); 

が重要です。その結果、パターン内部のすべての単一引用符をエスケープする必要があります。

出力:

fggfhfghfghf 

$config['website'] = 'aaaaaa'; 


asdasdasdasdasdas 
関連する問題