Intereting Posts
Как сделать контроллеры, модели, просматривать внешнюю папку приложения в Lavarel 4? Symfony2: делает fetch = "EAGER" создает соединение? Самый простой способ создать / получить php_memcache.dll для PHP 5.4 как сделать regexp не голодным с кавычками? Как мы можем отправлять сообщения GCM в большом количестве 1000 в базу данных, скажем, из 10 000 зарегистрированных пользователей? Создание PHP-почты () асинхронно Доступ к объекту JSON через PHP Поддерживается ли поддержка ZLIB в PHP по умолчанию или НЕ? Phalanger c # сборка DLL импортирована, но не может быть вызвана Разбор вывода команды «верхний» (оболочка) с помощью PHP php – почему слово округляет целое число? Можете ли вы добавить строки в удаленный файл, используя ftp_put () или что-то подобное? dyld: библиотека не загружена: /usr/local/lib/libpng16.16.dylib с чем-либо связанным с php Переопределить зависимость базовой базы PHP в композиторе Самый быстрый способ чтения содержимого файла

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

Я пытаюсь удалить всю пунктуацию из строки с помощью простого регулярного выражения и функции php preg_replace, хотя я получаю следующую ошибку:

Ошибка компиляции: классы с именем POSIX поддерживаются только внутри класса со смещением 0

Я предполагаю, что это означает, что я не могу использовать классы с именем POSIX за пределами класса при смещении 0. Мой вопрос: что это значит, когда он говорит «внутри класса со смещением 0»?

$string = "I like: perl"; if (eregi('[[:punct:]]', $string)) $new = preg_replace('[[:punct:]]', ' ', $string); echo $new; 

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

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

ПРИМЕЧАНИЕ. Модификатор g не требуется с реализацией PHP PCRE !

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

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

От Джонатана Лоновского (см. Комментарии):

 > [The g modifier] means "Global" -- ie, find all existing matches. Without it, regex functions will stop searching after the first match. 

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

(О, и избегайте функций ereg если вы можете – они не будут включены в PHP 5.3.)

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