Старый 12.04.2011, 18:54   #211
Nightmare
Banned
 
Регистрация: 06.07.2010
Сообщений: 162
Репутация: 10
По умолчанию

Tакой вопрос. По регуляркам php
Надо сделать такую фишку.
Поиск и замена текста, ну скажем текста из переменной.
В переменной $lol = 'тут куча HTML кода';
Надо найти и заменить во всех местах адрес сайта на свой, делается это конечно же легко через str_replace.
Но как мне заменить текст только в тех ссылках, где отсутствуют конкретные расширения?
Например
http://site.com/folder/page/
http://site.com/dir/lol.html
http://site.com/ass/image.jpg
http://site.com/script/lol.js
То есть сделать замену, но исключить замену из ссылок где есть конкретные расширения, в данном случае .js и .jpg два расширения, чтобы такие ссылки он оставлял без изменений, а все остальные заменял.
Буду очень благодарен.
Nightmare вне форума   Ответить с цитированием
Старый 12.04.2011, 20:34   #212
b3
 
Аватар для b3
 
Регистрация: 18.08.2010
Сообщений: 352
Репутация: 105
По умолчанию

Как я понял тебе нужно заменить ссылки везде, кроме тэгов ?

<img src="">
<link href="" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="">

В общем поменять ссылки только на документы из тэгов <a href=""> Верно?

Если угадал то вот мой вариант:
PHP код:
<pre></a><?php
$html 
'
<img src="http://site.com/ass/image.jpg" />
<script type="text/javascript" src="http://site.com/script/lol.js"></script>
<a href="http://site.com/folder/page/">http://site.com/folder/page/</a>
<a href="http://site.com/dir/lol.html">http://site.com/dir/lol.html</a>
'
;


echo 
preg_replace('#<a(.*)href="http://site.com/(.*)>#Uis','<a$1href="http://my.com/$2>',$html);
?>
Результат:
Код:
<pre></a>
<img src="http://site.com/ass/image.jpg" />
<script type="text/javascript" src="http://site.com/script/lol.js"></script>
<a href="http://my.com/folder/page/">http://site.com/folder/page/</a>
<a href="http://my.com/dir/lol.html">http://site.com/dir/lol.html</a>
b3 вне форума   Ответить с цитированием
Старый 12.04.2011, 21:15   #213
Nightmare
Banned
 
Регистрация: 06.07.2010
Сообщений: 162
Репутация: 10
По умолчанию

b3 у тебя просто замена одного сайта на другой, делается это ещё проще через str_replace('site1.ru','site2.ru',$lol);

Вопрос в другом, оставить без изменений те ссылки, у которых определённые расширения (которые я так же могу добавлять\убирать в коде).
то есть заменить все ссылки одного сайта на другой, кроме ссылок с конкретными расширениями, то есть чтобы изменению не подлежали ссылки с расширением .js и .jpg скажем.

Чтобы в итоге было так:
Код:
$html = ' 
<img src="http://site.com/ass/image.jpg" /> 
<script type="text/javascript" src="http://site.com/script/lol.js"></script> 
<a href="http://my.com/folder/page/">http://my.com/folder/page/</a> 
<a href="http://my.com/dir/lol.html">http://my.com/dir/lol.html</a> 
';
А ссылки с .js и .jpg на конце остаются без изменения.
Nightmare вне форума   Ответить с цитированием
Старый 12.04.2011, 21:17   #214
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

Прикольная задачка, понравилось:

PHP код:
<pre>
<?php 
$lol 
'
крутой HTML-езык
<a href="http://site.com/folder/page/"</a>
<a href="http://site.com/dir/lol.html"</a>
<a href="http://site.com/ass/image.jpg"</a>
<a href="http://site.com/script/lol.js"</a>
крутой HTML-езык'
;
function 
my_site($matches){
    
$ext end(explode(".",$matches[1]));
    if(
$ext=="jpg" || $ext=="js"){
      return 
"<a href=".$matches[1].">";
    } else return 
str_replace("site.com","hacker.com","<a href=".$matches[1].">");
}
echo 
preg_replace_callback('#<a href="(http:[^"]+)"[^>]*>#Uis',"my_site",$lol);
?>
</pre>
Результат (можно посмотреть в сорцах):

PHP код:
крутой HTML-езык
<a href=http://hacker.com/folder/page/>
<a href=http://hacker.com/dir/lol.html>
<a href=http://site.com/ass/image.jpg>
<a href=http://site.com/script/lol.js>
крутой HTML-езык 
PS: принцип надеюсь понятен, меняй реги под свои нужды и юзай в условиях нужное кол-во $matches для случаев с <a href="http://ololo">http://ololo</a>

Последний раз редактировалось Pashkela; 12.04.2011 в 21:23..
Pashkela вне форума   Ответить с цитированием
Старый 12.04.2011, 21:33   #215
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

Есть такой массив
Код:
Array
(
    [0] => Array
        (
            [0] => val0
            [1] => val1
            [2] => val2
        )

    [1] => Array
        (
            [0] => var0
            [1] => var1
            [2] => var2
        )

)
Подскажите пожалуйста, как его вывести в таком порядке
Код:
[0][0]
[1][0]
--
[0][1]
[1][1]
--
[0][2]
[1][2]
--
[0][3]
[1][3]
--
Т.е. так вот
val0 var0
val1 var1
val2 var2

Последний раз редактировалось SeNaP; 12.04.2011 в 22:54.. Причина: ну вроде так более понятнее :)
SeNaP вне форума   Ответить с цитированием
Старый 12.04.2011, 22:48   #216
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию

PHP код:
<?php 
$arr 
= array(array('val0','val1','val2'),array('var0','var1','var2')); 
$a count($arr[1]);
for(
$i=0;$i<$a;$i++) echo $arr[0][$i] . " " $arr[1][$i] . "<br>";
?>

Последний раз редактировалось Pashkela; 12.04.2011 в 23:30..
Pashkela вне форума   Ответить с цитированием
Старый 13.04.2011, 14:15   #217
bi0.sz
 
Регистрация: 01.02.2011
Сообщений: 9
Репутация: 0
По умолчанию

способ ламерскиий :|)
PHP код:
<?php
$arr 
= array(array('val0','val1','val2'),array('var0','var1','var2')); 
echo 
"{$arr['0']['0']} {$arr['1']['0']} 
<br>
{$arr['0']['1']} {$arr['1']['1']}
<br>
{$arr['0']['2']} {$arr['1']['2']}</br>";
?>
bi0.sz вне форума   Ответить с цитированием
Старый 13.04.2011, 17:28   #218
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

Дело в том, что этот двойной массив динамический, т.е. в нём может быть как 2 массива так и 100 массивов, содержащии некоторый записи, и просто указав конкретный первый ключ $arr[0][$i] это как б не то. Нужно узнать сколько содержится массивов в первом массиве, и потом выводить. А вот как вывести именно в таком порядке, я не могу додуматься
SeNaP вне форума   Ответить с цитированием
Старый 13.04.2011, 18:44   #219
S00pY
 
Аватар для S00pY
 
Регистрация: 06.07.2010
Сообщений: 38
Репутация: 35
По умолчанию

Если я правильно понял суть:
PHP код:
<?php
$arr 
= array(array('val0','val1','val2'),array('var0','var1','var2'),array('vag0','vag1','vag2')); 
$a count($arr);
for(
$j=0;$j<count($arr[1]);$j++)
{
    for(
$i=0;$i<$a;$i++)
    { 
        echo 
$arr[$i][$j] . " ";
    }
    echo 
"<br>";
}  
?>

Цитата:
val0 var0 vag0
val1 var1 vag1
val2 var2 vag2
Вообще, не плохо бы было нормально сформулировать задание.

Последний раз редактировалось S00pY; 13.04.2011 в 18:53..
S00pY вне форума   Ответить с цитированием
Старый 13.04.2011, 20:08   #220
SeNaP
 
Аватар для SeNaP
 
Регистрация: 03.08.2010
Сообщений: 152
Репутация: 10
По умолчанию

Спасибо вам парни Выкрутился так
PHP код:
$arr = array(array(1,2,3,4,5),array(6,7,8,9,10));
for(
$i=0$i<count($arr); $i++)
{
    for(
$j=0$j<count($arr[$i]); $j++)
    {    
        for(
$k=0$k<count($arr[$i]); $k++)
        {
            echo 
$arr[$k][$j];
        }
        echo 
"\r\n";
    }
    break;

Пойду прокачивать русский язык
SeNaP вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot