2010-02-18 3 views
5

Я получаю это предупреждение от PHP после перехода от раскола к preg_split для PHP 5.3 совместимости:PHP ошибка preg_split при переходе от раскола к preg_split

PHP Warning: preg_split(): Delimiter must not be alphanumeric or backslash 

код РНР:

$statements = preg_split("\\s*;\\s*", $content); 

Как я могу исправить регулярное выражение, чтобы больше не использовать \

Спасибо!

ответ

10

Ошибка в том, что для регулярного выражения требуется символ разделителя.

$statements = preg_split("/\s*;\s*/", $content); 
4

Хотя вопрос был помечен как ответ через две минуты после запроса, я хотел бы добавить некоторую информацию для записей.

Подобно тому, как строки ограничены кавычками, регулярные выражения на многих языках, такие как Perl или JavaScript, ограничены прямыми косыми чертами. Это приведет к выражениям вида:

/\s*;\s*/ 

Этот синтаксис также позволяет задавать модификаторы:

/\s*;\s*/Ui 

Perl-совместимых регулярных выражений (ака PREG _... функции) PHP наследуют это. Однако сам PHP не поддерживает этот синтаксис, поэтому загрузка preg_split() с /\s*;\s*/ приведет к возникновению ошибки синтаксического анализа. Вместо этого вы заключите его в кавычки, чтобы создать обычную строку.

Еще одна вещь, которую вы должны учесть, это то, что PHP позволяет изменять разделитель. Например, вы можете использовать это:

@\s*;\s*@Ui 

Для чего это полезно? Это упрощает использование косой черты внутри выражения, поскольку вам не нужно их избегать. Сравнить:

/^\/home\/.*$/i 
@^/home/.*[email protected]