После нескольких часов работы над большинством решений здесь проблема была решена только при установке 32-разрядного JDK.
preg_*
функции ожидают Perl совместимые регулярные выражения с разделителями. Так попробуйте это:
preg_replace('/[[:punct:]]/', ' ', $string)
ПРИМЕЧАНИЕ: 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.
Объяснение , почему Вы получаете ту ошибку: PCRE использует свободное определение Perl того, каков разделитель. Ваши внешние []
с похожи на допустимые разделители к нему, заставляя его читать [:punct:]
как regex часть.
(О, и избегают ereg
функции, если Вы можете - они не собираются быть включенными в PHP 5.3.)
Я просто добавил g к regexp, как предложено в одном из anwers, это сделало противоположность wahts, ожидал и не отфильтровывал пунктуацию, оказывается, что preg_replace не требует g, поскольку это глобально/рекурсивно во-первых