preg_match

  • Автор темы Автор темы Dareczek
  • Дата начала Дата начала
Вурдалак
если в цикле вызывать?
Он все поновой проверьяет я не согласен с Вурдалак (хотья может я не прав). Так как я делал цикл, и в нем прописал count(от чегото, не помнью), и тот счетчик count() все время вызывался. Я проверьял вроде 10тыс. строк и он делал за 30сек. А потом сменил просто на цифру, и цикл выполнился за 10секунд. 20 сек разница. Ну и тоже самое будет с preg_match() думаю. А может я и не прав ))
 
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
 
PHP:
/[^\s]+\.([^\s]+?)\.?$/
Вот вроде как правильная регулярка для точки, с такими изменениями она проигрывает)
 
так я только com и делал чтобы показывались ). Ну я не знаю, хотя реально не особо тут регулярка выиграла. Но: подумайте сколько кода на регулярку выйдет а сколько на самодельную функцию? Думаю тут регулярка выиграла )). Хотя я еще дома посмотрью потестирую )
 
так вы всеровно регулярку в функцию засунулли )).
function getPregDomenZone($urls)
{
$result = array();
foreach ($urls as $url) {
preg_match('/[^\s]+\.([^\s]+)/', $url, $mass);
$result[$mass[1]][] = $url;
}

return $result;
}
Выберите ее от туда, и подставьте сразу напрямую в циклах. Думаю там она бошку снесет всем )))
 
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>
Ну вы думаю поняли. Т.е он еще берет лишние ссылки, которые мне вовсе не нужны. Как сделать чтобы он их не брал?
 
регулярки не для парсинга html.
Вы походу не список имеете, а его откуда-то достаете, так что скоро темку прикроют:)
 
Я нормально прошу ответить. Я пробовал с DOMdocument но там только для XML подходит
 
читаешь api и юзаешь, как душе угодно), немного тяжеловато, но вполне приемлемо)
 
угу) сам недавно на этот пост набрел, читая лурк))
А почему тему до сих пор не закрыли?)) человек явно хочет чужой контент парсить.
А тебе то че?! Неможешь ответить и не суй свой нос где не надо. Пусть отчечают те, которые могут.
 
Мне ничо. Это просто правилам форума противоречит. Тебе ответили - exec +whois
 
Сверху