Регуляркой собрать хеши

komyak

Постоялец
Регистрация
4 Фев 2009
Сообщения
483
Реакции
194
Помогите пожалуйста с регуляркой, не пойму как сделать. Паршу список сайтов на наличие хешей, как мне вычленить хеши и имена такого вида:
Код:
<p>user:d609ec04c87e253c8538ad342c120b90:IwLS4sYM9NiK1cRWBXW9WpZZPitM3xEW</p>
<p>user:71ec9d1a7735496e89459dc117593239:oExipLLArM1AUMjBv5DjfhBd6mgg3MUx</p>
<p>user:d5ac7b77dc4eebe2c710d998508d8a9b</p>
Чтоб на выходе получилось:
Код:
user:d609ec04c87e253c8538ad342c120b90:IwLS4sYM9NiK1cRWBXW9WpZZPitM3xEW
user:71ec9d1a7735496e89459dc117593239:oExipLLArM1AUMjBv5DjfhBd6mgg3MUx
user:d5ac7b77dc4eebe2c710d998508d8a9b

Хеш всегда между тегами <p>

Добавлено через 25 минут
На Ачате помогли, может кому пригодится:
PHP:
preg_match_all( '|<p>(.+?:[a-f0-9]{32}(?::[a-z0-9]*)?)</p>|i', $result, $hash )
 
можно еще проще

PHP:
preg_match_all( '|<p>([^:]+:[^:]+:[^<]+)|i', $result, $hash)
 
можно еще проще
PHP:
preg_match_all( '|<p>([^:]+:[^:]+:[^<]+)|i', $result, $hash)

это вариант не прокатит для
<p>user:d5ac7b77dc4eebe2c710d998508d8a9b</p>

вот так еще проще и все варианты охватывает...
PHP:
preg_match_all( '|<p>([^<]+)|i', $result, $hash)
 
это вариант не прокатит для
<p>user:d5ac7b77dc4eebe2c710d998508d8a9b</p>
вот так еще проще и все варианты охватывает...
PHP:
preg_match_all( '|<p>([^<]+)|i', $result, $hash)

канешна все. например и такие:

Код:
<p>заголовок</p>
<p>а тута а нас буду хэши</p>
<p>а вообще говоря формат хэшей у нас предопределен, поэтому маску можно было и не трогать</p>
<p>user:d609ec04c87e253c8538ad342c120b90:IwLS4sYM9NiK1cRWBXW9WpZZPitM3xEW</p>
<p>user:71ec9d1a7735496e89459dc117593239:oExipLLArM1AUMjBv5DjfhBd6mgg3MUx</p>
<p>user:d5ac7b77dc4eebe2c710d998508d8a9b</p>
 
про такие случае никто не уточнял,
так что язвить не стоит.
 
wal эта регулярка парсит всё, и текст, и хеши. В итоге в логах куча лишнего мусора.
Как я понял, оптимально будет собирать хеши двумя регулярками, сначала искать с солью, потом только md5
 
wal эта регулярка парсит всё, и текст, и хеши. В итоге в логах куча лишнего мусора.
Как я понял, оптимально будет собирать хеши двумя регулярками, сначала искать с солью, потом только md5

лови универсальный вариант:

PHP:
<?php
$st ="<p>user:d609ec04c87e253c8538ad342c120b90:IwLS4sYM9NiK1cRWBXW9WpZZPitM3xEW</p>
<p>user:71ec9d1a7735496e89459dc117593239:oExipLLArM1AUMjBv5DjfhBd6mgg3MUx</p>
<p>user:d5ac7b77dc4eebe2c710d998508d8a9b</p>";

 if (preg_match_all( '|<p>([^:]+:*[^<]*:*[^<]*)|i', $st, $result) )
	for ($i=0; $i<count($result[1]); $i++)
		print $result[1][$i]."\n";
?>
 
diavolic, твой вариант не подходит. Собирает действительно всё, и хеши, и текст, и теги. Поиск md5(32 символа) нужен полюбому, т.к. противном случае получаю туже кучу мусора.
name:hashmd5 - обязательные параметры, и они будут и в обычном хеше, и с солью.

PHP:
<?php 
$st ="<p>user:d609ec04c87e253c8538ad342c120b90:IwLS4sYM9NiK1cRWBXW9WpZZPitM3xEW</p> 
<p>user:71ec9d1a7735496e89459dc117593239:oExipLLArM1AUMjBv5DjfhBd6mgg3MUx</p> 
<p>user:d5ac7b77dc4eebe2c710d998508d8a9b</p>
<p>us fgfgfger - d5ac7b7 7dc4eebe2c710  d998fgfgfgf gffgfg508d8a9  </p> <div> bfgfdgz fgfbbvvb  fggfdd dsddss</div>"; 

 if (preg_match_all( '|<p>([^:]+:*[^<]*:*[^<]*)|i', $st, $result) ) 
    for ($i=0; $i<count($result[1]); $i++) 
        print $result[1][$i]."\n"; 
		
	//В итоге на выходе пипец...	
?>
 
komyak, мог бы немного поправить, вроде несложная маска была:

PHP:
<?php  
$st ="<p>user:d609ec04c87e253c8538ad342c120b90:IwLS4sYM9NiK1cRWBXW9WpZZPitM3xEW</p>  
<p>user:71ec9d1a7735496e89459dc117593239:oExipLLArM1AUMjBv5DjfhBd6mgg3MUx</p>  
<p>user:d5ac7b77dc4eebe2c710d998508d8a9b</p> 
<p>us fgfgfger - d5ac7b7 7dc4eebe2c710  d998fgfgfgf gffgfg508d8a9  </p> <div> bfgfdgz fgfbbvvb  fggfdd dsddss</div>";  

 if (preg_match_all( '|<p>([^:]+:[^<]*:*[^<]*)|i', $st, $result) )  
    for ($i=0; $i<count($result[1]); $i++)  
        print $result[1][$i]."\n";  
         
    //В итоге на выходе все нормально...     
?>
 
В хеше точно нет пробелов нужно добавить ^\s и в хеше нет русских букв.
 
Назад
Сверху