PHP поиск md5 хешей в строке

Samail
На сайте с 10.05.2007
Offline
361
591

В строке в разных местах содержатся хеши вида "m.3a16d28e4c28cd3cea7d52a9aadd304c" они всегда начинаются с "m." и заканчиваются, пробелом табом или переносом строки. Как найти их все и создать из найденного массив?

---------- Добавлено 30.12.2016 в 23:20 ----------

Пока сделал так:

preg_match_all('!m\.(\w{32})!si',$message,$result);
$result = array_diff($result[1], array(''));
$result = implode("|", (array_unique($result)));
tommy-gung
На сайте с 22.11.2006
Offline
287
#1

так?

reg_match_all('!m\.(.*?)\s!si', $message, $result);
Здесь не могла быть ваша реклама
Samail
На сайте с 10.05.2007
Offline
361
#2

tommy-gung, так в самом начале сделал, но не все хеши в массив попадали.

vandamme
На сайте с 30.11.2008
Offline
672
#3

Samail, скорее всего он не все пробелы учел

надо было

\s*

ноль или более пробелов, табуляций

ноя бы сделал наверное так

m\.([a-z0-9]{32})\s*

https://regex101.com/r/LmjsWt/1

в данном случае \s* даже и не нужен.

Samail
На сайте с 10.05.2007
Offline
361
#4
vandamme:
[a-z0-9]{32}

[a-z0-9]{32} у меня указано \w{32} что наверное то-же самое или нет?

....для хеша наверное хватит [a-f0-9]{32}

vandamme
На сайте с 30.11.2008
Offline
672
#5

Samail, теоретически туда могут попасть символы из других кодировок отличные от жесткого условия [a-f0-9]

٣۳߃३৩੩૩୩௩౩೩൩๓໓3

подробнее http://stackoverflow.com/questions/890686/should-i-use-d-or-0-9-to-match-digits-in-a-perl-regex

lutskboy
На сайте с 22.11.2013
Offline
172
#6

m\.[^\s\t]{32}

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