2013-02-03 117 views
0

可能重複:
How to replace text over multiple lines using preg_replace的preg_replace多行(PHP)

我想從文件中讀取,比替換一些模式的一些文本。如果我試圖從一個字符串中替換它,但是如果文件中有多個這樣的字符串,它不起作用。

$ this-> session-> set_flashdata('error_message','Naslovna vrstica je bilauspešnoshranjena');

這是一個文本的例子,我試圖替換替換工作確定只是這一行,但不是如果在文件中有其他這樣的行,儘管所有匹配個人。

$content = file_get_contents("C:\Users\Borut\\test.txt"); 
$pattern="/^.*session->set_flashdata\((.*),(.*)\);$/"; 
$replacement="\$_SESSION[$1]=$2"; 

這是我的代碼。如何替換上面顯示的多個字符串。

+1

從我所看到的,它看起來像你的模式有一個'開始'和'結束'點,如果你給測試線將會正常工作,但是如果您想要替換多個事件,則需要對其進行修改,以便它仍然可以找到沒有定義的起點或終點的模式。 即你想模式更像'/ session-> set_flashdata \((。*),(。*)\);' – Jon

回答

1

你想要的修飾符是m。你可以找到所有的調節器here 這就是說,最簡單的和更好的正則表達式的解決辦法是

"/\$this->session->set_flashdata\((.*?),\s*(.*?)\);/" 

你注意到一個?在*之後。這是爲了停止與你的貪婪匹配。另外請注意,修改器不是必需的,在刪除^$

+0

我不需要s,因爲這意味着換行符是排除的,它適用於排除^和$。我不明白?儘管如此,沒有*照顧零元素 –

+0

是的,但它會盡可能地匹配。看看http://www.regular-expressions.info/repeat.html,瞭解它如何在頁面下半部分工作。另外,'/ m'就是我的意思。我已經在上面更新了我的答案 –