|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » PHP - регулярные выражения: HELP |
|
|
PHP - регулярные выражения: HELP
|
Новый участник Сообщения: 5 |
никак не могу разобраться с регулярными выражениями, помогите
нужно выцепить имя картинки в строке(ах): <img src="somefile.gif" alt=""> <img src=somefile.gif alt=""> <img src = somefile.gif> с помощью функции preg_match_all |
|
Отправлено: 21:45, 07-08-2004 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать <?php $test = <<<TEST some text <imG src=image.gif> another text text continues <iMg src= "image.png" Alt=text> txt < img src ='image.jpg' alt ="text sfds" sOme="other tags"> text again <img src=iMAGE.tiff alt=""> that's all, folks! TEST; // регэксп длинный, я его немножко разбил $src_part = 'src\s*=\s*("[^"]*"|\'[^\']*\'|[^\s]+)'; $alt_part = '(\s+alt\s*=\s*("[^"]*"|\'[^\']*\'|[^\s]+))?'; preg_match_all('/<\s*img\s+'.$src_part.$alt_part.'(.*?)>/i', $test, $result); echo '<pre>'; print_r($result); echo '</pre>'; ?> Array ( [0] => Array ( [0] => <imG src=image.gif> [1] => <iMg src= "image.png" Alt=text> [2] => < img src ='image.jpg' alt ="text sfds" sOme="other tags"> [3] => <img src=iMAGE.tiff alt=""> ) [1] => Array ( [0] => image.gif [1] => "image.png" [2] => 'image.jpg' [3] => iMAGE.tiff ) [2] => Array ( [0] => [1] => Alt=text [2] => alt ="text sfds" [3] => alt="" ) [3] => Array ( [0] => [1] => text [2] => "text sfds" [3] => "" ) [4] => Array ( [0] => [1] => [2] => sOme="other tags" [3] => ) ) Важное замечание: после img обязательно должно быть src, а не какой-либо другой тэг. И alt, если он есть, дожен быть обязательно после src, иначе он не выцепится. Я когда-то давно делал на php парсер html (свой двигатель шаблонов делал), у него этих проблем не было бы, но он давно утерян ![]() |
------- Отправлено: 17:41, 08-08-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Guest |
|
Отправлено: 01:47, 09-08-2004 | #3 |
![]() Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать ![]() ![]() |
------- Отправлено: 01:49, 09-08-2004 | #4 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Кто-нибудь может подсказать в чем проблема?
Значит так, возникла необходимость проверить все письма пришедшие на 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.., т.е. те которые содержали символ подчеркивания. Не пойму в чем дело. Пытался использовать другие регулярные выражения, но безрезультатно. Может проблема заключается в чем-то другом? |
|
------- Отправлено: 10:13, 08-07-2008 | #5 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать И еще, проверил, что если указать номер письма (где содержатся 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() возвращает все письмо в виде простого текста. |
------- Отправлено: 10:47, 08-07-2008 | #6 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Сорри, нашел проблему.
Регулярка тут не причем, просто, надо было вынести preg_match_all() из цикла и проверить весь текст писем или же объединять массив $emails с другим массивом... ну или еще как-нибудь |
------- Отправлено: 13:35, 08-07-2008 | #7 |
Новый участник Сообщения: 5
|
Профиль | Сайт | Отправить PM | Цитировать Вот строка [1][0], 0.15, 0.18, 0.16
Нужно из неё выцепить 0.15 0.18 и 0.16 Числа могут меняться, но, в любом случае, они будут дробными. Помогите, пожалуйста. |
Последний раз редактировалось gasha, 15-07-2008 в 18:44. Отправлено: 18:24, 15-07-2008 | #8 |
Новый участник Сообщения: 5
|
Профиль | Сайт | Отправить PM | Цитировать Решил самостоятельно...
$reg = "/[\d]{1,2}\.[\d]{1,2}/s"; preg_match_all ($pattern, $text, $res); |
Отправлено: 18:51, 15-07-2008 | #9 |
Кот Ти Сообщения: 7318
|
Профиль | Отправить PM | Цитировать gasha, а нельзя строку просто обработать explode'ом?
Скажем, $data = explode(',', $string); а потом просто проверять каждый элемент, конвертируется во float или нет: is_float(trim($data[$i]); |
Отправлено: 18:59, 15-07-2008 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
регулярные выражения | Ginger | Вебмастеру | 60 | 21-03-2012 01:11 | |
[решено] PHP|регулярные выражения, preg_match | morgan1991 | Вебмастеру | 11 | 10-03-2010 01:03 | |
Разное - PHP - регулярные выражения: HELP | GoldenOrb | Программирование и базы данных | 10 | 08-09-2008 16:47 | |
PHP. Регулярные выражения и русские символы. | Prisoner | Вебмастеру | 3 | 16-01-2004 14:31 | |
Регулярные выражения | est | Хочу все знать | 6 | 02-10-2002 14:17 |
|