preg_match

Dareczek

Новичок
Вурдалак
если в цикле вызывать?
Он все поновой проверьяет я не согласен с Вурдалак (хотья может я не прав). Так как я делал цикл, и в нем прописал count(от чегото, не помнью), и тот счетчик count() все время вызывался. Я проверьял вроде 10тыс. строк и он делал за 30сек. А потом сменил просто на цифру, и цикл выполнился за 10секунд. 20 сек разница. Ну и тоже самое будет с preg_match() думаю. А может я и не прав ))
 

hell0w0rd

Продвинутый новичок
PHP:
<?php
function getDomenZone($urls)
{
    $result = array();
    foreach ($urls as $url) {
        $temp = rtrim($url, '.');
        $result[substr($temp, strrpos($temp, '.'))][] = $url;
    }
    return $result;
}
function getPregDomenZone($urls)
{
    $result = array();
    foreach ($urls as $url) {
        preg_match('/[^\s]+\.([^\s]+)/', $url, $mass);
        $result[$mass[1]][] = $url;
    }

    return $result;
}
$times = array();
for($t = 0; $t<10; $t++)
{
    $test = array();

    $masks = array('http://%s.%s.%s.', 'http://%s.%s2.%s', 'https://%s1%s.%s', 'http://%s.%s0.0%s.', '%s%s.%s');
    for($i = 0; $i < 100000; $i++)
    {
        $first = md5(mt_rand());
        $second = md5(mt_rand());
        $third = md5($first.$second.mt_rand());
        $test[] = sprintf($masks[$i%5], substr($first, 0, 3),substr($third, 4, 7),substr($second, 8, 11));
    }

    $start = microtime(true);
    $res = getDomenZone($test);
    $strTime = microtime(true) - $start;
    $res = null;

    $start = microtime(true);
    $res = getPregDomenZone($test);
    $pregTime = microtime(true) - $start;
    $res = null;

    $times[] = array($strTime, $pregTime);
}

foreach ($times as $value) {
    echo $value[0].' : '.$value[1].PHP_EOL;
}
Ок, регулярки выигрывают, хоть и не особо много) Только у тебя регулярка не правильная, она матчится на точки и у тебя на выходе будут com и com.:)

хотя результаты меняются если убрать rtrim...
Без rtrim:
$ php domen.php
0.28029203414917 : 0.36464786529541
0.29849004745483 : 0.38660502433777
0.29807209968567 : 0.37032890319824
0.28998517990112 : 0.36059713363647
0.28861284255981 : 0.35878992080688
0.28823113441467 : 0.3554859161377
0.35297012329102 : 0.35316610336304
0.30493998527527 : 0.34884285926819
0.29170799255371 : 0.3605809211731
0.29286098480225 : 0.34982395172119
C rtrim:
$ php domen.php
0.39972901344299 : 0.46487092971802
0.42342805862427 : 0.41946983337402
0.44344592094421 : 0.38821387290955
0.44316816329956 : 0.3583300113678
0.51142501831055 : 0.35657978057861
0.42245697975159 : 0.35502004623413
0.41557502746582 : 0.42355799674988
0.41707015037537 : 0.35396409034729
0.42301201820374 : 0.35459518432617
0.41679310798645 : 0.35339403152466
 

hell0w0rd

Продвинутый новичок
PHP:
/[^\s]+\.([^\s]+?)\.?$/
Вот вроде как правильная регулярка для точки, с такими изменениями она проигрывает)
 

Dareczek

Новичок
так я только com и делал чтобы показывались ). Ну я не знаю, хотя реально не особо тут регулярка выиграла. Но: подумайте сколько кода на регулярку выйдет а сколько на самодельную функцию? Думаю тут регулярка выиграла )). Хотя я еще дома посмотрью потестирую )
 

Dareczek

Новичок
так вы всеровно регулярку в функцию засунулли )).
function getPregDomenZone($urls)
{
$result = array();
foreach ($urls as $url) {
preg_match('/[^\s]+\.([^\s]+)/', $url, $mass);
$result[$mass[1]][] = $url;
}

return $result;
}
Выберите ее от туда, и подставьте сразу напрямую в циклах. Думаю там она бошку снесет всем )))
 

Dareczek

Новичок
PHP:
                	<a href="http://ellada-ubk.com/">&#1069;&#1083;&#1083;&#1072;&#1076;&#1072;</a> 
			
					
                    - &#1054;&#1090;&#1077;&#1083;&#1100;, &#1095;&#1072;&#1089;&#1090;&#1085;&#1099;&#1077; &#1072;&#1087;&#1072;&#1088;&#1090;&#1072;&#1084;&#1077;&#1085;&#1090;&#1099; &#1074; &#1087;&#1086;&#1089;. &#1057;&#1077;&#1084;&#1080;&#1076;&#1074;&#1086;&#1088;&#1100;&#1077; (&#1070;&#1041;&#1050;). &#1059;&#1089;&#1083;&#1086;&#1074;&#1080;&#1103; &#1087;&#1088;&#1086;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1103; &#1080; &#1087;&#1080;&#1090;&#1072;&#1085;&#1080;&#1103;. &#1060;&#1086;&#1090;&#1086;, &#1074;&#1080;&#1076;&#1077;&#1086;.
                    
                </li>
Представим что здесь идут теги(я начало не писал так как там много чего нужно дописать нехочу захламлять форум)
</ul>
        </fieldset>
        
        

	<span><img src='http://o.aolcdn.com/os/dmoz/img/dividerN.gif' style="height:2px;float:left;width:100%" /></span>
		
        <fieldset class="fieldcap fieldcapRn" style="font-size:1.2em; margin-top:11px;">
        	
			
                  
			<ul class="disc-large">
				<div class="float-l">
				<!--<br>-->
				<li >
				<span style="margin-right:140px; font-size:16px;">
				Поиск&nbsp;"<b>&#1055;&#1088;&#1086;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;</b>"&nbsp;в:&nbsp;&nbsp;
				
	            <a href="http://www.nigma.ru/?s=&#1087;&#1088;&#1086;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;&t=web&rg=t%3D_c%3DРоссия_&rg_view=&yn=1&gl=1&rm=1&ms=1&yh=1&av=1&ap=1&nm=1&lang=all&srt=0&sf=1">Нигма</a>&nbsp;-
<a href="http://yandex.ru/yandsearch?stype=www&nl=0&text=&#1087;&#1088;&#1086;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;">Яндекс</a>&nbsp;-
<a href="http://search.aol.com/aolcom/search?query=&#1087;&#1088;&#1086;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;">AOL</a>&nbsp;-
<a href="http://www.bing.com/search?q=language:ru+&#1087;&#1088;&#1086;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;">Bing</a>&nbsp;-
<a href="http://www.google.ru/search?hl=ru&lr=lang_ru&q=&#1087;&#1088;&#1086;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;">Google</a>&nbsp;-
<a href="http://ru.search.yahoo.com/search?fl=2&ei=UTF-8&p=&#1087;&#1088;&#1086;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1077;">Yahoo</a> 				
				
				</li>
	            </div>
			
		        <div class="float-r" style="float:right; margin-top:2px;">
			

	            </div>
				
            </ul>

        </fieldset>
Таксь проблема в том: написал регулярное выражение которое выберет все от начала тега <fieldset> и до конца этого тега. Т.е поиск должен законьчиться на
PHP:
                </li>
Представим что здесь идут теги(я начало не писал так как там много чего нужно дописать нехочу захламлять форум)
</ul>
        </fieldset>
Но он заканчивается на
PHP:
		        <div class="float-r" style="float:right; margin-top:2px;">
			

	            </div>
				
            </ul>

        </fieldset>
Ну вы думаю поняли. Т.е он еще берет лишние ссылки, которые мне вовсе не нужны. Как сделать чтобы он их не брал?
 

hell0w0rd

Продвинутый новичок
регулярки не для парсинга html.
Вы походу не список имеете, а его откуда-то достаете, так что скоро темку прикроют:)
 

Dareczek

Новичок
Я нормально прошу ответить. Я пробовал с DOMdocument но там только для XML подходит
 

freeek

Новичок
читаешь api и юзаешь, как душе угодно), немного тяжеловато, но вполне приемлемо)
 

Dareczek

Новичок
угу) сам недавно на этот пост набрел, читая лурк))
А почему тему до сих пор не закрыли?)) человек явно хочет чужой контент парсить.
А тебе то че?! Неможешь ответить и не суй свой нос где не надо. Пусть отчечают те, которые могут.
 

hell0w0rd

Продвинутый новичок
Мне ничо. Это просто правилам форума противоречит. Тебе ответили - exec +whois
 
Сверху