2011-01-13 111 views
1

我學習正則表達式左右,我想通了一些關於匹配一個或多個字符,但我有一個案例,但不知道如何解決這個..需要幫助PHP正則表達式

,比如我有:

$data = "bla bla -start- blu blu blu -end- bla bla"; 
$pattern = "/\-start\-[\w]\-end\- /"; 
preg_match($pattern, $data, $matches); 
print_r($matches); 

我打算採取「-start-」和「 - 結束」之間的任何東西,所以我希望得到
「藍光藍光藍光」。
有什麼建議嗎?

回答

4

\w僅代表單詞字符,並且您還需要允許空格。假設你真的想允許-start--end-之間的任何東西,你可以使用.匹配任何字符。

連字符不需要進行轉義,除非封閉在一個字符圖案(方括號[]之間),所以你可以只用-取代\-

就像使用一個\w表示匹配任何字符,而.代表匹配任何字符,所以你需要在添加一些更多的信息。按照以下任一與+至少會指出符合一個字符或*將指示零個或多個個字符。假設你想至少有一個字符,你的表情應該沒問題這樣的:

$pattern = "/-start-(.+)-end- /"; 

假如你可能會遇到類似的表達式:-start- foo -end- -end-,並要終止第一-end-(內容提取的foo)那麼你需要以非貪婪的方式進行操作。 PHP的正則表達式是由默認的貪婪,爲了與?關閉這個功能,你按照+(或*),像這樣:

$pattern = "/-start-(.+?)-end- /"; 
+0

連字符不需要除字符類轉義。你的答案是否定點。 – coreyward 2011-01-13 04:52:41