Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » PHP - регулярные выражения: HELP

Ответить
Настройки темы
PHP - регулярные выражения: HELP

Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


никак не могу разобраться с регулярными выражениями, помогите
нужно выцепить имя картинки в строке(ах):
<img src="somefile.gif" alt="">
<img src=somefile.gif alt="">
<img src = somefile.gif>
с помощью функции preg_match_all

Отправлено: 21:45, 07-08-2004

 

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить 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 (свой двигатель шаблонов делал), у него этих проблем не было бы, но он давно утерян

-------
http://ivank.ru


Отправлено: 17:41, 08-08-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Guest

Guest


Профиль | Цитировать


Если нужны только имена картинок, то я бы так написал:
Код: Выделить весь код
preg_match_all("/[a-zA-Z0-9_-]{1,50}\.(png|gif|jpg)/",$string,$result);
В этом случае все имена картинок будут лежать в массиве $result[0]

Отправлено: 01:47, 09-08-2004 | #3


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Это был я, куда то кука моя делась-иеня не признали

-------
Fortes fortuna adiuvat


Отправлено: 01:49, 09-08-2004 | #4


Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить 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.., т.е. те которые содержали символ подчеркивания. Не пойму в чем дело. Пытался использовать другие регулярные выражения, но безрезультатно.
Может проблема заключается в чем-то другом?

-------
Just wanna know...


Отправлено: 10:13, 08-07-2008 | #5


Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить 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() возвращает все письмо в виде простого текста.

-------
Just wanna know...


Отправлено: 10:47, 08-07-2008 | #6


Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Отправить PM | Цитировать


Сорри, нашел проблему.
Регулярка тут не причем, просто, надо было вынести preg_match_all() из цикла и проверить весь текст писем
или же объединять массив $emails с другим массивом... ну или еще как-нибудь

-------
Just wanna know...

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:35, 08-07-2008 | #7


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Сайт | Отправить 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
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Решил самостоятельно...

$reg = "/[\d]{1,2}\.[\d]{1,2}/s";
preg_match_all ($pattern, $text, $res);

Отправлено: 18:51, 15-07-2008 | #9


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1204

Профиль | Отправить PM | Цитировать


gasha, а нельзя строку просто обработать explode'ом?
Скажем, $data = explode(',', $string); а потом просто проверять каждый элемент, конвертируется во float или нет: is_float(trim($data[$i]);
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:59, 15-07-2008 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » PHP - регулярные выражения: HELP

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
регулярные выражения 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




 
Переход