PHP страно обрабатывает регулярные выражения

Вопросы связанные с работой Apache

Модераторы: Art.i, vasya

PHP страно обрабатывает регулярные выражения

Сообщение Ярослав » Пт окт 28, 2005 9:14 am

Для выделения текста жирным шрифтом использую следующее регулярное выражение:
$content=preg_replace("/b$word\b/i",$wordbold,$content);
Как ни страно у меня на локальном сервере всё работает, но на моём вдс не работает. Может это связано с версией РНР?
Ярослав
 
Сообщений: 12
Зарегистрирован: Вт сен 06, 2005 8:53 am

Re: PHP страно обрабатывает регулярные выражения

Сообщение dimanjy » Пт окт 28, 2005 11:54 am

Ярослав писал(а):Для выделения текста жирным шрифтом использую следующее регулярное выражение:
$content=preg_replace("/b$word\b/i",$wordbold,$content);


Если для выделения в исходном тексте используется что-то вроде BB-кода
Код: выделить все
b ... \b


То в регексп нужно перед слешем еще один ставить, чтобы он не воспринимался как мета-самвол, т.е.
Код: выделить все
preg_replace("/b$word\\b/i",...)
dimanjy
 
Сообщений: 21
Зарегистрирован: Пт окт 21, 2005 1:09 am

Сообщение Ярослав » Пт окт 28, 2005 12:36 pm

Но ведь у меня на локале работает, значит регулярное выражение составлено правильно, но после закачки файла на вдс перестает работать. Я думаю здесь дело не в регулярном выражении.
Ярослав
 
Сообщений: 12
Зарегистрирован: Вт сен 06, 2005 8:53 am

Сообщение garry » Пт окт 28, 2005 3:56 pm

у меня тут тоже проблема почему на FreeBSD поточный редактор sed мое регулярное выражение обрабатывает как надо, а на Debian нет ?

regexp не достаточно стандартизирован ?

что кстати на локале стоит ?
garry
Консультант
 
Сообщений: 2241
Зарегистрирован: Сб дек 07, 2002 3:39 pm
Откуда: FirstVDS

Сообщение Anarki » Пт окт 28, 2005 8:51 pm

Ярослав
http://phpfaq.ru/debug
Anarki
 
Сообщений: 8
Зарегистрирован: Пн окт 24, 2005 12:26 pm

Сообщение pelvis » Вс окт 30, 2005 2:21 pm

спасибо за дебаггер
вообще то perl совместимые выражения поддерживаются по дефолту с версии 4.2.
мы провели масенький эксперимент над работой функции preg_replace и вот вам результат
http://capel.ru/morph1.php?search=световые
это с вдс за 25 долларов
http://zamenitel.ru/morph1.php?search=световые
а вот это с восьмидолларового хостинга
Результат на лице.
Убедительная просьба специалистам по советам читать книги , а саппорту установить php как надо со всеми библиотеками функций.
К слову: можно поменять preg_replace на ereg_replace, тогда все будет работать и как есть сейчас, только вот кто оплатит лишний труд?
pelvis
 
Сообщений: 5
Зарегистрирован: Ср авг 31, 2005 11:56 am
Откуда: москва

Сообщение Sergey » Вс окт 30, 2005 2:38 pm

Также убедительная просьба всем, кому нужны Perl Compaptible Regular Expressions, не полениться и включить их непосредственно через ISPmanager, пункт меню "Расширения PHP" (модуль называется pcre.so).

Если Вы думаете, что включать по умолчанию ВСЕ расширения PHP на VDS'е - правильная политика, то Вы не учитываете, сколько памяти отъедает PHP в такой конфигурации. А памяти на VDS не сказать чтобы очень много.
Sergey
Support team
 
Сообщений: 261
Зарегистрирован: Вт окт 05, 2004 3:42 pm

Сообщение Sergey » Вс окт 30, 2005 2:41 pm

К слову, поменять все вхождения слова preg_replace на ereg_replace во всех Ваших файлах с расширением php можно одной единственной командой. Так что в общем непонятно за что платить :)
Sergey
Support team
 
Сообщений: 261
Зарегистрирован: Вт окт 05, 2004 3:42 pm

Сообщение pelvis » Вс окт 30, 2005 2:45 pm

спасибо, sergey
о такой подставе я и не помышлял.
pelvis
 
Сообщений: 5
Зарегистрирован: Ср авг 31, 2005 11:56 am
Откуда: москва

Сообщение Sergey » Вс окт 30, 2005 2:49 pm

Подумал и решил, что наверное будет полезно запостить сюда эту команду :)
Код: выделить все
find /home/site.ru/htdocs/ -name \*.php |xargs perl -pi -e s/preg_replace/ereg_replace/g


В смысле, о какой подставе?
Sergey
Support team
 
Сообщений: 261
Зарегистрирован: Вт окт 05, 2004 3:42 pm

Сообщение pelvis » Вс окт 30, 2005 3:45 pm

включили, перезагрузили - так же не работает
а подстава в том, что это называется не "расширение" а "нормализация" потому что это работать должно по дефолту.
pelvis
 
Сообщений: 5
Зарегистрирован: Ср авг 31, 2005 11:56 am
Откуда: москва

Сообщение Sergey » Вс окт 30, 2005 3:50 pm

Во-первых давайте обойдёмся без тюремных выражений. Буду тереть.

Во-вторых скажите какой конкретно оператор PHP работает не так, как Вам нужно (дайте кусок скрипта), и скажите, как он по Вашему должен работать. Тогда можно будет поговорить предметно о Вашей проблеме, а не пытаться её угадать.
Sergey
Support team
 
Сообщений: 261
Зарегистрирован: Вт окт 05, 2004 3:42 pm

Сообщение pelvis » Вс окт 30, 2005 4:06 pm

извините за множественность постов-глюк в дебагере :)
Последний раз редактировалось pelvis Вс окт 30, 2005 4:10 pm, всего редактировалось 1 раз.
pelvis
 
Сообщений: 5
Зарегистрирован: Ср авг 31, 2005 11:56 am
Откуда: москва

Сообщение pelvis » Вс окт 30, 2005 4:08 pm

<?php
$wordarr=explode(" ",$search);
$endwordarrpril=array("/ые\b/","/ым\b/","/ых\b/");
$endwordarrpril1=array("ые","ым","ых");
$endwordarrsush=array("/а\b/","/и\b/","/е\b/");
$endwordarrsush1=array("а","и","е");

foreach($wordarr as $word)
{
foreach($endwordarrpril1 as $temp)
{
$ready[]=preg_replace($endwordarrpril,$temp,$word);
}
foreach($endwordarrsush1 as $temp)
{
$ready[]=preg_replace($endwordarrsush,$temp,$word);
}
}
$readynotretry=array_count_values($ready);
foreach($readynotretry as $key => $temp)
{
$ok[]=$key;
}
print_r($ok);
?>


ну вот пример на который я дал линк.
он и не работает
preg_replace не работает
pelvis
 
Сообщений: 5
Зарегистрирован: Ср авг 31, 2005 11:56 am
Откуда: москва


Вернуться в Apache

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1