2016-12-11 14 views
1

str_replaceを使用して、読み込まれたtxtファイルから '#'文字で始まる特定の文字列を削除していますが、テスト時のhtml出力では#記号だけが削除されます。私が抱えている問題は、その特定の文字で始まるすべてのテキストを削除したいということです( '#'も含めて)。PHP複数の行全体をテキストファイルから削除する

は、これまで私が試してみました:

1)

$data = str_replace('#','',file_get_contents($strFileName)); 
return $data; 

2)

fopen($strFileName,'r'); 
$remove = "#"; 
$tmpData = file_get_contents($strFileName); 
$data = preg_replace("/.*\b" . $remove ."\b.*\n/ui", "#" , $tmpData); 
return $data; 

オリジナルのテキストファイルは次のようである:

# 

# bla bla bla 

# 

# bla bla bla 

# 

# bla bla bla 

最初の試行では#文字は削除されましたが、残りの単語は残りました。 2つ目は全く動作しませんでした。おかげさまで

答えて

1

あなたはpreg_replace

$data = preg_replace("/^#.*/m", "", $tmpData); 
+0

完璧、多くのありがとう。コメントがインデントされたときに行を削除する方法についてのヒント?たとえば、 "#comment bla bla"は字下げされており、上記の式はそれを検出しません。ありがとう – ASO

+0

'\ s'を追加してください:$ data = preg_replace("/^ \ s *?#。*/m "、"、$ tmpData); ' – Federkun

+0

それはそうしました。ありがとう:-) – ASO

1

であなたが実際に#を交換するためのpreg_replaceを使用する必要があることを行うことができます。しかし、複数行のテキストを処理していることを正規表現に "伝える"必要があるので、最初の行の後に置換を停止することはできません。 preg_replaceに送信されたパターンがなるようにするには、正規表現パターンの終わりにm修飾子を適用していることを実行します - :複数行検索

/^#.*/mを意味し、式の最後にmの点に注意してください。

これは、行開始時に# char(行開始識別子は^)とそれ以降のすべての行と一致します。以下replacmentので :

$data = preg_replace('/^#.*/m','',$tmpData);

は何もない上にマッチした行全体を置き換えます。

Here is a working example

関連する問題