2011-04-01 68 views
0

我通過file_get_contents($text_file)一條在形式內容的開始處的標記抓住一個文件...正則表達式來找到令牌的第一次出現內部「[]」

[widget_my_widget] 

全部內容文本的文件可能是......

[widget_my_widget] 
Here is the start of the text file. It may have [] brackets inside it, 
but only the first occurrence denotes the token. 

我正在尋找的正則表達式搶括號[]中第一次出現內部的文本字符串。在這種情況下,我想返回widget_my_widget並將其加載到我的變量中。

在此先感謝您的幫助。

回答

3

\[(.+?)\]中的第一個捕獲組將匹配方括號內的字符串。在此字符串(文件內容),忽略了左方括號,然後儘可能少的匹配,但到

if (preg_match('/\[(.+?)\]/', file_get_contents($text_file), $group)) { 
    print $group[1]; 
} 

在第一次出現(不:

在PHP中,你可以使用它像這樣包括)右方括號。

+0

也需要逃脫第二個支架。 – 2011-04-01 21:38:12

+0

@jb,不知道第二個括號是什麼意思,但是在大多數正則表達式實現中,']'不需要轉義(儘管如此,它並沒有傷害)。 – 2011-04-01 21:41:04

+0

@jb,@Bart Kiers謝謝。我會逃避它,以避免電腦或人類的誤解:-) – 2011-04-01 21:44:56

1

我認爲Staffan的答案大部分是正確的,但我有一個小小的改正,我想你可能想避免^,或者字符串必須以括號開頭,並且你說你只是想要第一個實例。到代碼...

$str = ... 

$pattern = '/\[([^\]+])\]/'; 
$n = preg_match($pattern, $str, $matches); 
if ($n > 0) { 
    $first_match = $matches[1]; 
    /// do stuff 
} 

我的模式看起來有點混亂,因爲支架具有特殊的意義,所以我會盡力解釋它...我們正在尋找一個開放式支架,然後一個或多個不是右括號的字符(在此情況下,脫字符表示「不」),然後是右括號。括號是圍繞我們想要捕捉的內容,而內部括號是一個字符類。如果沒有任何意義,就忽略我剛剛說的一切。

+0

對,我會編輯它。 – 2011-04-01 21:47:46

+0

+1對於建議和有幫助的解釋。謝謝Nick。 – 2011-04-01 22:16:02

相關問題