Ошибка php preg_split при переключении с split на preg_split

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

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

код php:

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

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

Спасибо!


person benjisail    schedule 18.02.2010    source источник


Ответы (3)


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

$statements = preg_split("/\s*;\s*/", $content);
person Ben James    schedule 18.02.2010

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

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

/\s*;\s*/

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

/\s*;\s*/Ui

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

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

@\s*;\s*@Ui

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

/^\/home\/.*$/i
@^/home/.*$@i
person Álvaro González    schedule 18.02.2010

Если вам не нравятся разделители, вы можете использовать инструмент T-Regx:

pattern("\\s*;\\s*")->split($content):

Вы также можете использовать Pattern::of("\\s*;\\s*")->split()

person Danon    schedule 29.01.2019