Помогите с регулярными выражениями

12
M
На сайте с 28.02.2006
Offline
236
855

Есть страница с текстом, в нем ссылки в таком виде

<li class="raz">www.koloda.net/index.html</li>

....
<li class="raz">www.koloda1.com</li>
....

Мне нужно вырезать только адрес сайта до слеша, т.е. вот так www.koloda.net

Вот таким образом у меня получилось вырезать полный адрес

preg_match_all("/<li class=\"raz\">[^>]*<\/li>/U", $file1, $file2);

а как только адрес вырезать? Что то у меня ничего не выходит. Благодарю заранее за помощь.

dantess
На сайте с 06.11.2004
Offline
133
#1

preg_match_all("/<li class=\"raz\">([^\/>]*)[^>]*<\/li>/U", $file1, $file2);

Вот так можно...

M
На сайте с 28.02.2006
Offline
236
#2

Нет, тоже самое выдает, полные адреса.

deleon
На сайте с 16.09.2004
Offline
173
#3

Так это проще некуда:

preg_match_all('~<li[^>]*?>(.*?)\/*?<\/li>~i', $s, $res);

M
На сайте с 28.02.2006
Offline
236
#4
deleon:

preg_match_all('~<li[^>]*?>(.*?)\/*?<\/li>~i', $s, $res);

Неа, тоже не идет, вообще что попало выдает.

deleon
На сайте с 16.09.2004
Offline
173
#5
mihas:
Неа, тоже не идет, вообще что попало выдает.

Странно, Ваш пример у меня работает с этой регуляркой. У вас там не UTF-8 кодировка случайно? Тогда добавьте ключ u и будет счастье.

M
На сайте с 28.02.2006
Offline
236
#6

Черт его знает, у меня уже крыша съезжает. Я вам в личку код отправил, если будет желание и время гляньте пожалуйста.

deleon
На сайте с 16.09.2004
Offline
173
#7

Сорри, в прошлом примере есть ошибочка. Правильно будет так:

preg_match_all('~<li[^>]*?>(.*?)\/.*?<\/li>~i', $s, $res);

Ай! Сразу засаду не увидел, это не будет работать, если нет слэша. Сейчас добавлю пример, поторопился :)

Пробуй так:

preg_match_all('~<li[^>]*?>(.*?)[<|\/]~i', $s, $res);
Kolyaj
На сайте с 28.03.2006
Offline
69
#8

mihas, а результат работы регулярного выражения как обрабатываете? В примере

dantess:
preg_match_all("/<li class=\"raz\">([^\/>]*)[^>]*<\/li>/U", $file1, $file2);

$file2[1][0], $file2[1][1], ... должны содержать адрес до слеша.

З.Ы. только правильнее вроде как


preg_match_all("/<li class=\"raz\">([^\/<]*)[^<]*<\/li>/U", $file1, $file2)

а еще проще


preg_match_all("/<li class=\"raz\">([^\/<]*)/U", $file1, $file2)
deleon
На сайте с 16.09.2004
Offline
173
#9

Итак, совместными усилиями выведем результат:

preg_match_all('~<li[^>]*?>([^<\/]*)~', $file1, $file2);

Это если нужно обработать все тэги li, в противном случае вариант Kolyaj:

preg_match_all("/<li class=\"raz\">([^\/<]*)/U", $file1, $file2)

P.S. А мне с MySQL никто не поможет в соседней ветке? 🚬

mutex
На сайте с 10.04.2005
Offline
64
#10

Такой вот вариант (поправленный):


preg_match ("/www\.([a-z0-9\-]+)\.([a-z]+?)/U",$str, $ret);
~~
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий