|
|
|
| У меня есть ссылка, к примеру http://www.softtime.ru.
Как мне от неё отрезать http:// и выписать только www.softtime.ru?
П.С. Попробовал вот так:
$row[4] = preg_replace("http://", "", $row[4]);
| ,
но выдает ошибку:
[url]Warning:[/url] preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in ...
Как поступить? | |
|
|
|
|
|
|
|
для: Freddie_X
(19.05.2006 в 14:31)
| |
<?php
$link = "http://www.softtime.ru";
$link = preg_replace("%(?:http://)?(.*)%i", "\\1", $link);
?>
|
| |
|
|
|
|
|
|
|
для: WebTech
(19.05.2006 в 14:57)
| | Спасибо! Помогло! А если не сложно, объясните, что значат "%", "%i", "?:", "\\1"? А то сделал, и не знаю даже как это действует!
Спасибо! | |
|
|
|
|
|
|
|
для: Freddie_X
(19.05.2006 в 15:08)
| | % - это ограничитель регулярного выражения. Может быть любым символом, кроме обратного слэша "\". Если сам ограничитель требуется использовать в регулярном выражении, его следует пометить обратным слэшем, например "\%" - будет обозначать сам символ "%".
i - это модификатор регулярного выражения, который указывает игнорировать регистр при обработке.
Последовательность ?: внутри подшаблона (выражение в круглых скобках), следующая перед набором символов исключает данный подшаблон из списка ссылок. В нашем случае подшаблон (http://) был не нужен, поэтому исключаем его из списка ссылок следующим образом (?:http://)
\\1 обозначает ссылку на первый подшаблон в регулярном выражении. В нашем выражении было два подшаблона, один из которых был исключен с помощью ?:, поэтому в списке ссылок остался один и номер у него 1 :-)
Функция preg_replace() в аргументе, который используется для замены, позволяет указывать ссылки на подшаблоны в регулярном выражении, которое используется в качестве образца для поиска.
Представим выражение типа http://www.softtime.ru в виде двух подшаблонов - (http://) и остальная часть, которая может быть представлена в виде любой последовательности символов. Т.е. можно записать как (.*). В конечном результате нам нужна именно остальная часть, а (http://) не нужен. Поэтому мы его исключаем из списка ссылок, а ссылаемся на подшаблон (.*), т.е.
$link = preg_replace("%(?:http://)?(.*)%i", "\\1", $link)
|
| |
|
|
|
|
|
|
|
для: WebTech
(19.05.2006 в 15:55)
| | а что означает "?" между подшаблонами? | |
|
|
|
|
|
|
|
для: Freddie_X
(19.05.2006 в 16:07)
| | ? означает, что предыдущий символ или подшаблон может использоваться 0 или 1 раз.
Другие числители
* - использовать 0 или более раз
+ - использовать 1 или более раз
Я использовал этот числитель, потому что http:// может быть в адресе, а может и не быть. Т.е. запись вида www.softtime.ru тоже правомочна. Если http:// есть, то может встречаться 1 раз, не больше. | |
|
|
|
|
|
|
|
для: WebTech
(19.05.2006 в 16:58)
| | Преогромное тебе спасибо! Я очень рад, что ты мне помог!!! =))) | |
|
|
|
|
|
|
|
для: Freddie_X
(19.05.2006 в 14:31)
| |
<?
$text = "http://www.softtime.ru";
preg_match("/^(http:\/\/)?([^\/]+)/i", $text, $out);
echo $out[2];
?>
|
| |
|
|
|