Рекурсивный акроним словосочетания «PHP: Hypertext Preprocessor»
Добро пожаловать на форум PHP программистов!
За последние 24 часа нас посетили 17938 программистов и 1595 роботов. Сейчас ищут 1379 программистов ...
Отличия от регулярных выражений POSIX
Вернуться к: Регулярные выражения PCRE
По состоянию на PHP 5.3.0, расширение регулярные выражения POSIX считается устаревшим. Существует целый ряд отличий между регулярными выражениями POSIX и PCRE. На этой странице перечислены наиболее важные из них, которые необходимо знать для того, чтобы выполнить преобразование в PCRE.
- Функции PCRE требуют, чтобы шаблон был заключен в разделители.
- В отличие от POSIX, в расширении PCRE нет специальных функция для поиска совпадений без учета регистра. Вместо них используется модификатор шаблона i (PCRE_CASELESS). Также доступны другие модификаторы шаблонов для изменения стратегии поиска совпадений.
- Функции POSIX находят самое длинное совпадение, ближнее к левому краю, а PCRE останавливается с первым найденным совпадением. Если строка не совпадает вовсе, это не имеет значения, в противном случае это может оказать существенное влияние и на результаты поиска совпадений, и на скорость этого поиска. Чтобы проиллюстрировать эту разницу, рассмотрим следующий пример из книги Джеффри Фридла "Регулярные выражения" (Jeffrey Friedl, "Mastering Regular Expressions"). При применении шаблона one(self)?(selfsufficient)? к строке oneselfsufficient, PCRE вернет oneself, но при использовании POSIX результатом будет вся строка oneselfsufficient. Обе (под)строки соответствуют исходному шаблону, но POSIX требует, чтобы наиболее длинная вернулась в качестве результата.
- Определение "символьного класса" в POSIX отличается от PCRE. Простые выражения в квадратных скобках, для нахождения определенных символов поддерживается в символьных классах PCRE, а сопоставления элементов, символьные классы и символьные эквиваленты POSIX не поддерживаются. Передача выражения с символьным классом, начинающегося и заканчивающегося на :, . или = символы, в PCRE рассматривается как попытка использования одной из этих неподдерживаемых функций и вызывает ошибку компиляции.
POSIX | PCRE |
---|---|
ereg_replace() | preg_replace() |
ereg() | preg_match() |
eregi_replace() | preg_replace() |
eregi() | preg_match() |
split() | preg_split() |
spliti() | preg_split() |
sql_regcase() | Нет эквивалента |
Вернуться к: Регулярные выражения PCRE