2010-09-08 21 views
1

我想执行这个正则表达式:正则表达式的错误:没有结束符

<?php 
    preg_match("/^([^\x00-\x1F]+?){0,1}/", 'test string'); 
?> 

但是要得到一个错误:

Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in /var/www/preg.php on line 6 

我不明白它是从哪里来。我有一个结束分隔符在那里...我试图改变分隔符到其他符号,它并没有帮助。

我希望你对这个问题的帮助。

+1

你想匹配什么? '+?){0,1}'没有多大意义。 “+”表示至少在出现前面的匹配时,“?”表示前一次匹配的一个或者没有出现,“{0,1}”表示与“?”相同。那么你想得到什么? – jigfox 2010-09-08 08:52:09

回答

3

Gumbo一样,preg_match不是二进制安全的。

使用,而不是:

preg_match("/^([^\\x{00}-\\x{1F}]+?){0,1}/", 'test string')); 

这是PCRE指定Unicode代码点的正确方法。

+0

谢谢你的例子。我用你的变种。 – 2010-09-08 09:07:57

1

我不确定关于PHP,但也许问题是你需要逃避你的反斜杠? 尝试"/^([^\\x00-\\x1F]+?){0,1}/"

+0

它可能是\ x00被解释为字符串的结尾,然后它被移交给正则表达式引擎 – einarmagnus 2010-09-08 08:50:27

4

我猜PHP扼流圈上表示在C.

字符串末尾的 NULL character

用单引号试试吧,这样\x00由PCRE引擎解释,而不是由PHP:

'/^([^\x00-\x1F]+?){0,1}/' 

看起来这是一个已知的bug(参见Problems with strings containing \x00)。

+0

谢谢,这是有效的。我和我一起可以接受2个答案。 – 2010-09-08 09:07:28