php preg_split ошибка при переключении от разделения до preg_split

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

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

код php:

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

Как я могу зафиксировать regex для не использования еще \

Спасибо!

5
задан benjisail 18 February 2010 в 11:27
поделиться

2 ответа

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

$statements = preg_split("/\s*;\s*/", $content);
10
ответ дан 18 December 2019 в 13:13
поделиться

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

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

/\s*;\s*/

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

/\s*;\s*/Ui

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

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

@\s*;\s*@Ui

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

/^\/home\/.*$/i
@^/home/.*$@i
4
ответ дан 18 December 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: