2013-08-22 238 views
0

我用下面的代碼的preg_match未知的修飾詞「[」

$api_dump_reader = fopen($api_path, "r"); 
$content = fread($api_dump_reader, filesize($api_path)); 
$api_lines = explode("\n", $content); 

foreach($api_lines as $line) 
{ 
    if (preg_match("(Class) [a-zA-Z]+ (\: [a-zA-Z]+)? (\[[a-zA-Z+]\])?", $line)) 
    { 
     echo $line; 
    } 
} 

而且表達應該符合下面的例子

Class Instance [notbrowsable] 
Class Accoutrement : Instance 
Class PlayerGui : BasePlayerGui [notCreatable] 
... 

爲什麼我的正則表達式給我這個錯誤?我無法找到故障。

+2

你需要使用delimeters,如'/,#',, – 2013-08-22 07:38:47

+0

缺失的分隔符肯定是*殺死*錯誤,但RegExp本身也需要調整,請參閱下面的文章。在這方面,在這個問題上「比」重複的問題更多。 – cars10m

回答

0

試試這個:

/(class) [a-z]+(\: [a-z]+)?(\[[a-z+]+\])?/i 

爲正則表達式。你把這些空白放在錯誤的地方。他們需要放在可選組中。

編輯:

OK,我用分隔符得到了它,並將其添加到我的正則表達式。這當然是不正確的,但最重要的是RegExp本身存在的問題是而不是在先前輸入的問題中覆蓋(重複)。

+1

問題是他沒有定義任何分隔符。所以PHP認爲'('是「分隔符」。 – HamZa

2

你缺少斜線:

if (preg_match("/(Class) [a-zA-Z]+ (\: [a-zA-Z]+)? (\[[a-zA-Z+]\])?/", $line)) 
{ 
    echo $line; 
} 

試試吧:)

+1

'斜線'僅限FYI您可以使用任何非字母數字字符作爲分隔符。這裏的問題是,'('是作爲分隔符。 – HamZa

+0

@HamZa我總是用斜槓作爲分隔符,但是謝謝你的建議,我不知道它(但我知道'*'也在工作) 謝謝:) –

+1

大多數時候你看到'/'爲分隔符,但我傾向於使用不同的''''或'#',因爲'/'我必須避開所有的正斜槓就像'http://':) – HamZa

相關問題