![]() |
никак не могу разобраться с регулярными выражениями, помогите
нужно выцепить имя картинки в строке(ах): <img src="somefile.gif" alt=""> <img src=somefile.gif alt=""> <img src = somefile.gif> с помощью функции preg_match_all |
Код:
<?php Код:
Array Важное замечание: после img обязательно должно быть src, а не какой-либо другой тэг. И alt, если он есть, дожен быть обязательно после src, иначе он не выцепится. Я когда-то давно делал на php парсер html (свой двигатель шаблонов делал), у него этих проблем не было бы, но он давно утерян :( |
Если нужны только имена картинок, то я бы так написал:
Код:
preg_match_all("/[a-zA-Z0-9_-]{1,50}\.(png|gif|jpg)/",$string,$result); |
:) Это был я, куда то кука моя делась-иеня не признали:(
|
Кто-нибудь может подсказать в чем проблема?
Значит так, возникла необходимость проверить все письма пришедшие на Return-path:<email>, с темой undelivered, ну или в роде этой и выдернуть оттуда email адреса. Использовал следующий код: preg_match_all( '/[0-9a-z\._-]{3,15}@[0-9a-z\.-]{3,32}\.[a-z]{2,4}/i', $mail, $emails ) Регулярное выражение, конечно, не идеальное, но должно было бы выдернуть все email адреса. Но работает, как-то, не стабильно - до того как среди писем были те, которые содержали точку в адресе (.), скрипт выдергивал email-ы вида - name_lastname@anything.com, blah_balh@foo.net.., т.е. те которые содержали символ подчеркивания. Не пойму в чем дело. Пытался использовать другие регулярные выражения, но безрезультатно. Может проблема заключается в чем-то другом? |
И еще, проверил, что если указать номер письма (где содержатся email-ы, которые обычно не обнаруживаются reg-ex-ом) явно, то reg-ex их обнаруживает.
Вот часть кода: foreach ($mails as $mail_arr){ $mail = $pop3->pop3_retr($mail_arr[0]); preg_match_all('/[0-9a-z\._-]{3,32}@[0-9a-z\.-]+\.[a-z]{2,4}/i', $mail, $emails); } метод pop3_retr() возвращает все письмо в виде простого текста. |
Сорри, нашел проблему.
Регулярка тут не причем, просто, надо было вынести preg_match_all() из цикла и проверить весь текст писем или же объединять массив $emails с другим массивом... ну или еще как-нибудь |
Вот строка [1][0], 0.15, 0.18, 0.16
Нужно из неё выцепить 0.15 0.18 и 0.16 Числа могут меняться, но, в любом случае, они будут дробными. Помогите, пожалуйста. |
Решил самостоятельно...
$reg = "/[\d]{1,2}\.[\d]{1,2}/s"; preg_match_all ($pattern, $text, $res); |
gasha, а нельзя строку просто обработать explode'ом?
Скажем, $data = explode(',', $string); а потом просто проверять каждый элемент, конвертируется во float или нет: is_float(trim($data[$i]); |
Возьму на заметку, спасибо.
|
Coutty, твой вариант справляется лучше: мой не видит отрицательные значения. Но у тебя ещё прихватываются числа в скобках.
[18][0], 7.8 [19][0], 5.1 [20][0], -0.4 [21][0], -4.1 [22][0], -3.5 [23][0], -0.2 [24][0], 1.6 Это структура оригинала из которго нужно выцепить числа, здесь один столбик, но их может быть несколько. |
gasha, так я ж для примера...
Можно в проверке писать if (substr($data[$i], 0, 1) != "[" && is_float(trim($data[$i])) { ... } Т.е. если первый символ - не квадратная скобка и число конвертируется во float - значит пойдёт. |
Совсем туплю...
<?php $string ="[1][0], , , -0.15 , 0.18 , 0.16 "; $data = explode(',', $string); foreach ($data as $v) { if (is_float(trim($v))) {echo $v."<br>";} else {echo "Увы!<br>";} } ?> Выводятся одни "Увы!" Чего не так? УРА! Вот так заработало... <?php $string ="[1][0], , , -0.15 , 0.18 , 0.16 "; $data = explode(',', trim($string)); foreach ($data as $v) { if (is_float($v+0)) {echo $v."<br>";} else {echo "Увы!<br>";} } ?> |
Время: 18:34. |
Время: 18:34.
© OSzone.net 2001-