PHP regex: что такое “класс при смещении 0”?

После нескольких часов работы над большинством решений здесь проблема была решена только при установке 32-разрядного JDK.

27
задан strager 24 January 2009 в 00:19
поделиться

4 ответа

preg_* функции ожидают Perl совместимые регулярные выражения с разделителями. Так попробуйте это:

preg_replace('/[[:punct:]]/', ' ', $string)
44
ответ дан Gumbo 14 October 2019 в 13:55
поделиться

ПРИМЕЧАНИЕ: g модификатор не нужен с PHP's PCRE реализация!

В дополнение к ответ Гамбо , используйте g модификатор для замены весь происшествия пунктуации:

preg_replace('/[[:punct:]]/g', ' ', $string)
//                         ^

От Johnathan Lonowski (см. комментарии):

> [The g modifier] means "Global" -- i.e., find all existing matches. Without it, regex functions will stop searching after the first match.
5
ответ дан Community 14 October 2019 в 13:55
поделиться

Объяснение , почему Вы получаете ту ошибку: PCRE использует свободное определение Perl того, каков разделитель. Ваши внешние [] с похожи на допустимые разделители к нему, заставляя его читать [:punct:] как regex часть.

(О, и избегают ereg функции, если Вы можете - они не собираются быть включенными в PHP 5.3.)

1
ответ дан 14 October 2019 в 13:55
поделиться

Я просто добавил g к regexp, как предложено в одном из anwers, это сделало противоположность wahts, ожидал и не отфильтровывал пунктуацию, оказывается, что preg_replace не требует g, поскольку это глобально/рекурсивно во-первых

0
ответ дан 14 October 2019 в 13:55
поделиться
Другие вопросы по тегам:

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