Ошибка php preg_split при переключении с split на preg_split - PullRequest
5 голосов
/ 18 февраля 2010

Я получаю это предупреждение от 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);

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

Спасибо!

Ответы [ 3 ]

10 голосов
/ 18 февраля 2010

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

$statements = preg_split("/\s*;\s*/", $content);
4 голосов
/ 18 февраля 2010

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

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

/\s*;\s*/

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

/\s*;\s*/Ui

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

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

@\s*;\s*@Ui

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

/^\/home\/.*$/i
@^/home/.*$@i
0 голосов
/ 29 января 2019

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

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

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

...