2013-08-22 102 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

相关问题