ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   PHP (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [Регулярки & Mod_Rewrite] Задай вопрос, получи ответ. (https://forum.antichat.xyz/showthread.php?t=92492)

Gifts 17.12.2008 18:44

Постараюсь все-таки объяснить, что Вы биплан (самолет такой убогий)

Начнем - в быдлокоде, что Вы предложили последним. С помощью жадной регулярки получаете массив. Элемент $result[0][0] содержащий ВСЮ переменную $in. (Если у вас вдруг установлен PHP можете это проверить) Дальше вы разбиваете этот массив и выводите все не пустые строки. Но ояебу, можно было бы написать echo $in; результат был бы тот же.

Заметьте, я объяснил в чем вы не правы, и насколько вы не правы. При этом я не свел все это рассуждение, как вы - "моя твоя труба качал".

Прежде чем что-то, кому-то советовать, проверяйте все таки это у себя.

Pashkela 17.12.2008 19:11

"Прежде чем что-то, кому-то советовать, проверяйте все таки это у себя."

ыыыы, во-во, вот и проверь-те:

PHP код:

<?
$in

'<div class="a1"> 
    <div class="b1"> 
        <div class="c1"> 
            sometext1 
        </div> 
        <div class="c2"> 
            sometext2 
        </div> 
    </div> 
</div> 
<div class="a1"> 
    <div class="b1"> 
        <div class="c1"> 
            sometext3 
        </div> 
        <div class="c2"> 
            sometext4 
        </div> 
    </div> 
</div>'
;


if (
preg_match_all('/<div class="a1">(.*)<\/div>/s'$in$result)) 
echo 
'Оле!'"\r\n"; else echo 'Нету такого';
print_r ($result);
?>

ЗЫЖ Чем дальше в лес, тем глубже человек загоняет себя в задницу:)

Пуся, я всегда и абсолютно всё проверяю, прежде чем сюда выкладывать:)

astrologer 17.12.2008 19:21

2Gifts
PHP код:

'~<div class="\w\d">((?:+|(?R))*)</div>~si' 


Pashkela 17.12.2008 19:26

Цитата:

Сообщение от astrologer
2Gifts
PHP код:

'~<div class="\w\d">((?:+|(?R))*)</div>~si' 


))) И? Вы чо тут, сговорились что ли?:))) В итоге все равно раздельных значений нет:))))))) Все равно explode применять:))) И если сделать:

PHP код:

$t explode("\r\n"$result[0][0]);
print_r ($t); 

То там те же пустые строки присутствуют, да еще только первых двух значений:)

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

astrologer 17.12.2008 19:59

Цитата:

Сообщение от Pashkela
))) И? Вы чо тут, сговорились что ли?:))) В итоге все равно раздельных значений нет:))))))) Все равно explode применять:))) И если сделать:

PHP код:

$t explode("\r\n"$result[0][0]);
print_r ($t); 

То там те же пустые строки присутствуют, да еще только первых двух значений:)

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

Показываешь своё незнание?

Pashkela 17.12.2008 20:01

Цитата:

Сообщение от astrologer
Показываешь своё незнание?

а по делу? Гы-гы просто

ЗЫЖ Продолжаем разговор. Сами запустите свой скрипт хоть разок и посмотрите, чо там, где да как

ЗЗЫЫЖЖ Я в шоке сегодня с некоторых доселе уважаемых мною личностей

PS: И еще, чтобы безосновательно не тыкать в меня пальцем и не кричать "ОН ЛАМО!" (я не знаю, может у тебя любовь там с Gifts или еще что) может выложим готовый код по решению задачи Gifts-а именно в том ручье, в котором он думает, оно ему надо? Не просто регулярку какую-то взятую с неба и абсолютно бестолковую на мой взгляд, а код, от А до Я, как у меня? Тогда и сравним, чей код быстрей, правильней и оптимальней:) Пока я тут наблюдаю только один рабочий код - а именно свой. Со всем риспектом и etc.

astrologer 17.12.2008 20:15

Хорошо, чтобы не быть голословными, разберём результаты работы двух вариантов. Итак, для начала выясним, сколько было всего найдено совпадений.
У твоего варианта - одно, что уже фейл. Вот это совпадение, начинается на начале первого блока и захватывает заодно и второй (было бы их там 200, всё равно совпадение было бы одно):
PHP код:

[0] => Array
        (
            [
0] => <div class="a1">  
    <
div class="b1">  
        <
div class="c1">  
            
sometext1  
        
</div>  
        <
div class="c2">  
            
sometext2  
        
</div>  
    </
div>  
</
div>  
<
div class="a1">  
    <
div class="b1">  
        <
div class="c1">  
            
sometext3  
        
</div>  
        <
div class="c2">  
            
sometext4  
        
</div>  
    </
div>  
</
div>
        ) 

Теперь совпадения подмасок. Тоже одно:
PHP код:

    [1] => Array
        (
            [
0] =>   
    <
div class="b1">  
        <
div class="c1">  
            
sometext1  
        
</div>  
        <
div class="c2">  
            
sometext2  
        
</div>  
    </
div>  
</
div>  
<
div class="a1">  
    <
div class="b1">  
        <
div class="c1">  
            
sometext3  
        
</div>  
        <
div class="c2">  
            
sometext4  
        
</div>  
    </
div>  

        ) 

Собственно, аналогичное для второго варианта:
Совпадения регулярки:
PHP код:

[0] => Array
        (
            [
0] => <div class="a1">  
    <
div class="b1">  
        <
div class="c1">  
            
sometext1  
        
</div>  
        <
div class="c2">  
            
sometext2  
        
</div>  
    </
div>  
</
div>
            [
1] => <div class="a1">  
    <
div class="b1">  
        <
div class="c1">  
            
sometext3  
        
</div>  
        <
div class="c2">  
            
sometext4  
        
</div>  
    </
div>  
</
div>
        ) 

Совпадания подмасок:
PHP код:

    [1] => Array
        (
            [
0] =>   
    <
div class="b1">  
        <
div class="c1">  
            
sometext1  
        
</div>  
        <
div class="c2">  
            
sometext2  
        
</div>  
    </
div>  

            [
1] =>   
    <
div class="b1">  
        <
div class="c1">  
            
sometext3  
        
</div>  
        <
div class="c2">  
            
sometext4  
        
</div>  
    </
div


Pashkela 17.12.2008 20:17

Я извиняюсь, а вы последнюю версию моего скрипта запускаете или где? По всей видимости вы юзаете мою ПЕРВУЮ регулярку, заточенную под сайты, а не под бредовые требования Giffts-а. Господа, будьте внимательней, в последнем варианте моего скрипта совсем другая регулярка.

ЗЫЖ Продам очки, недорого

Вот моя последняя и вполне рабочая версия, можете найти её несколько выше, еще до Вашего первого поста по этой задаче:

PHP код:

<?
$in

'<div class="a1"> 
    <div class="b1"> 
        <div class="c1"> 
            sometext1 
        </div> 
        <div class="c2"> 
            sometext2 
        </div> 
    </div> 
</div> 
<div class="a1"> 
    <div class="b1"> 
        <div class="c1"> 
            sometext3 
        </div> 
        <div class="c2"> 
            sometext4 
        </div> 
    </div> 
</div>'
;


if (
preg_match_all('/<div class="a1">(.*)<\/div>/s'$in$result)) 
echo 
'Оле!'"\r\n"; else echo 'Нету такого';
$t explode("\r\n"$result[0][0]);
$count count($t);
for (
$i=0;$i<$count;$i++) 
{
if (!empty(
$t[$i])) {echo $t[$i];}
}
?>


astrologer 17.12.2008 20:19

Цитата:

Сообщение от Pashkela
Я извиняюсь, а вы последнюю версию моего скрипта запускаете или где? По всей видимости вы юзаете мою ПЕРВУЮ регулярку, заточенную под сайты, а не под бредовые требования Giffts-а. Господа, будьте внимательней, в последнем варианте моего скрипта совсем другая регулярка.

ЗЫЖ Продам очки, недорого

Из сообщения 102.

astrologer 17.12.2008 20:28

Цитата:

Сообщение от Pashkela
Вот моя последняя и вполне рабочая версия

Выводит вот это:
PHP код:

Оле!
<
div class="a1">  
    <
div class="b1">  
        <
div class="c1">  
            
sometext1  
        
</div>  
        <
div class="c2">  
            
sometext2  
        
</div>  
    </
div>  
</
div>  
<
div class="a1">  
    <
div class="b1">  
        <
div class="c1">  
            
sometext3  
        
</div>  
        <
div class="c2">  
            
sometext4  
        
</div>  
    </
div>  
</
div

Цитата:

может выложим готовый код
Разумеется
PHP код:

<?php

$in 
=
'<div class="a1">  
    <div class="b1">  
        <div class="c1">  
            sometext1  
        </div>  
        <div class="c2">  
            sometext2  
        </div>  
    </div>  
</div>  
<div class="a1">  
    <div class="b1">  
        <div class="c1">  
            sometext3  
        </div>  
        <div class="c2">  
            sometext4  
        </div>  
    </div>  
</div>'



preg_match_all('~<div class="\w\d">((?:[^<>]+|(?R))*)</div>~si'$in$data);
print_r($data[1]);

?>



Время: 10:34