2011-01-21 2 views
0

Уважаемый сэр/m'am Как я могу заменить устаревшее ereg_replace с preg_replace или str_replace и по-прежнему имеют ту же функциональность, что и в коде ниже?Замените ereg_match на preg_match

return ereg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number); 

///this doesnt work 

return preg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number); 

У любого умного есть ключ?

+0

Вы не просто заменить 'ereg_ *' с '' preg_ * и назвать его в день. Обе функции используют разные синтаксисы regex, и вам придется изучить синтаксис PCRE. Они не слишком разные, хотя ... – BoltClock

ответ

1

Попробуйте это:

return ereg_replace("^(.*)%%number%%(.*)$","\\1$i\\2",$number); 

становится

return preg_replace("/^(.*)%%number%%(.*)$/","\\1$i\\2",$number); 

Обратите внимание на/вокруг регулярных выражений.

+0

Жалобы на отсутствие окончательного разделителя '/' найдено – Koenraad

+0

Вот и вот ответ: return preg_replace ("/^(.*)%% число %% (. *) $ /", "$ I", $ number); thnx fr the effort – Koenraad

+0

Простите, я поставил закрытие/не в том месте – jb1785

0

Perl Совместимые регулярные выражения, используемые функциями preg_ в PHP, требуют символа демаркации в строке шаблона, определяющего, где начинается и заканчивается фактический шаблон строки, и где атрибуты для дополнительной функциональности, такие как нечувствительность к регистру, являются.

Например:

$pattern = "/dog/i"; // Search pattern for "dog", case insensitive. 
$replace = "cat"; 

$subject = "Dogs are cats."; 

$result = preg_replace($pattern, $replace, $subject); 
1

Я поеду с , прочитав сказочное руководство.

Руководство по PHP содержит a section для перехода от POSIX Regex к PCRE.

  1. Функция PCRE требует, чтобы образец прилагается разделителями.
  2. В отличие от POSIX, расширение PCRE не имеет выделенных функций для с учетом регистра. Вместо этого поддерживается с использованием модификатора/i pattern . Другие модификаторы шаблонов: также доступны для изменения стратегии соответствия .
  3. Функции POSIX находят самое длинное из самых левых совпадений, но PCRE останавливается в первом действительном матче. Если строка не совпадает вообще, она не имеет значения, но если она соответствует , это может иметь драматические эффекты как для итогового матча, так и для соответствующей скорости . Чтобы проиллюстрировать это различие, рассмотрим следующий пример из «Освоение регулярных выражений» на Джеффри Фридл. Используя шаблон один (сам)? (Самодостаточный)? на строка, имеющая достаточную производительность с PCRE , приведет к совпадению, но с использованием POSIX результатом будет полная строка. Обе строки (sub) соответствуют исходной строке , но POSIX требует, чтобы результат был .

Успехов,
Алинь

+0

+1 У меня были похожие проблемы, такие как OP, но только замена ereg на preg не помогла решить мои проблемы (даже с разделителями слэш). Ваш ответ указывает на нужное место, разница между двумя вариантами регулярных выражений, такими как PCRE, используемые функциями preg и POSIX ERE, используемыми ereg. благодаря – Wh1T3h4Ck5

Смежные вопросы