Ошибка регулярного выражения: без конечного разделителя - PullRequest
1 голос
/ 08 сентября 2010

Я пытаюсь выполнить это регулярное выражение:

<?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

Я не могу понять, откуда это. У меня есть конечный разделитель прямо здесь ... Я пытался изменить разделитель на другие символы, и это не помогло.

Буду признателен за помощь в решении этой проблемы.

Ответы [ 3 ]

4 голосов
/ 08 сентября 2010

Полагаю, PHP подавляет символ NULL , обозначающий конец строки в C.

Попробуйте использовать одинарные кавычки, чтобы \x00 интерпретировался механизмом PCRE, а не PHP:

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

Похоже, это уже известная ошибка (см. Проблемы со строками, содержащими \ x00 ).

3 голосов
/ 08 сентября 2010

Как и Gumbo, preg_match не является бинарно-безопасным.

Вместо этого используйте:

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

Это правильный способ указания кодовых точек Unicode в PCRE.

1 голос
/ 08 сентября 2010

Я не уверен насчет php, но, возможно, проблема в том, что вам нужно избежать обратной косой черты? попробуйте "/^([^\\x00-\\x1F]+?){0,1}/"

...