Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > preg_replace и точка!


Автор: Corol 12.3.2010, 20:37
нужно заменить http:// на http://www. 
пишу: 
Код
$url = preg_replace('/http:\/\//','http://www.',$url);

меняет.... но без точки!?? что не так?

Автор: bars80080 12.3.2010, 20:41
а за экранировать её?


Код

$url = preg_replace('/http:\/\//','http://www\.',$url);

Автор: Corol 12.3.2010, 20:47
вообщем крутое решение: 
Код

$url = preg_replace('/http:\/\//','http://www.www.',$url);


пс: может кто-то прояснит чего так?

Добавлено @ 20:48
Цитата(bars80080 @  12.3.2010,  20:41 Найти цитируемый пост)
preg_replace('/http:\/\//','http://www\.',$url);

не фурычит

Автор: bars80080 12.3.2010, 20:53
что-то у тебя неправильно настроено. у меня работает даже 

Код

$url = preg_replace('/http:\/\//','http://www.',$url);


проверь, что там у тебя в реальности находится в переменных до и после этой конструкции

Автор: skyboy 12.3.2010, 21:26
встречный вопрос: зачем в этом случае preg_replace, если str_replace хватает "за глаза"?

Автор: brother79 4.5.2010, 09:17
Цитата(Corol @  13.3.2010,  00:37 Найти цитируемый пост)
меняет.... но без точки!?? что не так? 

Скорее всего не всё экранированно в первом аргументе. Второй экранировать не нужно.

Код

$url = preg_replace('/http\:\/\//','http://www.',$url);


или посмотри что выдаст 

Код

preg_quote('http://');



Цитата(skyboy @  13.3.2010,  01:26 Найти цитируемый пост)
встречный вопрос: зачем в этом случае preg_replace, если str_replace хватает "за глаза"? 


Поддерживаю в данном случае.

Автор: SickFxck 4.5.2010, 15:35
Чисто для справки: то, что выдаёт preg_quote() на самом деле сразу подставлять в строковой литерал не надо, т.к. есть ещё один уровень экранирования (PHP). То есть правильнее
Код

$pattern = '/http\\:\\/\\//';

Хотя в данном случае вам «повезло» и можно писать и так:
Код

$pattern = '/http\:\/\//';

Автор: brother79 6.5.2010, 05:33
Цитата(SickFxck @  4.5.2010,  19:35 Найти цитируемый пост)
Чисто для справки: то, что выдаёт preg_quote() на самом деле сразу подставлять в строковой литерал не надо, т.к. есть ещё один уровень экранирования (PHP). То есть правильнее
Выделить всёкод PHP
1:
    
$pattern = '/http\\:\\/\\//';


Поясни пожалуйста по двойному слешу, я честно сказать не понял к чему это. Просто я как-то столкнулся с проблемой экранировать \n что в итоге решилось странным числом слешейперед n, оно работало, но я так и не понял почему так. Всё остальное экранировалось всегда без проблем.

Автор: SickFxck 6.5.2010, 07:41
Если ты экранируешь что-то с помощью бекслеша, то разве не логично экранировать и сам бекслеш?
Код

$s = 'O\'RLY'; // O'RLY
$s = 'O\\\'RLY'; // O\'RLY
$s = 'O\\'RLY'; // Parse error

Особенно это будет чувствоваться при двойных кавычках, т.к. там подобных последовательностей больше.

Автор: brother79 6.5.2010, 08:27
Цитата(SickFxck @  6.5.2010,  11:41 Найти цитируемый пост)
Особенно это будет чувствоваться при двойных кавычках, т.к. там подобных последовательностей больше. 


Не, ну последние примеры - тут всё понятно. Про двойные - там тоже всё ясно, сначала слеш проэкранировать, потом символ, а в одинарных,  '/http\\:\\/\\//' - тут-то какой смысл? ведь '\:' == '\\:' 

Автор: SickFxck 7.5.2010, 05:19
brother79, смысл в чётком понимании на каком уровне происходит экранирование. В данном случае это, конечно, необязательно и, быть может, даже ухудшает читаемость.

Автор: brother79 7.5.2010, 05:45
Цитата(SickFxck @  7.5.2010,  09:19 Найти цитируемый пост)
brother79, смысл в чётком понимании на каком уровне происходит экранирование. В данном случае это, конечно, необязательно и, быть может, даже ухудшает читаемость. 


У меня была задача отследить \n в строке. Как я только не пытался, пока не подсказали в одинарных кавычках использовать '\\n' Вот тут я так и не понял на каком уровне происходит экранирование, т.к. в одинарных кавычках, \n никак не преобразовывается, при этом в регулярке оно не пашет.

Автор: SickFxck 7.5.2010, 08:09
brother79, 
Код

$pattern = '/\\\\n/';

?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)