PHP - регулярные выражения: HELP

Аватара пользователя
GoldenOrb

PHP - регулярные выражения: HELP

Сообщение GoldenOrb »

никак не могу разобраться с регулярными выражениями, помогите

нужно выцепить имя картинки в строке(ах):

Изображение





с помощью функции preg_match_all
Аватара пользователя
GoldenOrb

Re: PHP - регулярные выражения: HELP

Сообщение GoldenOrb »

Код:

Код: Выделить всё

<?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 (свой двигатель шаблонов делал), у него этих проблем не было бы, но он давно утерян Изображение
Аватара пользователя
Guest

Re: PHP - регулярные выражения: HELP

Сообщение Guest »

Если нужны только имена картинок, то я бы так написал:



Код:

Код: Выделить всё

preg_match_all("/[a-zA-Z0-9_-]{1,50}\.(png|gif|jpg)/",$string,$result);

В этом случае все имена картинок будут лежать в массиве $result[0]
Аватара пользователя
vadimiron

Re: PHP - регулярные выражения: HELP

Сообщение vadimiron »

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

Re: PHP - регулярные выражения: HELP

Сообщение mra214 »

Кто-нибудь может подсказать в чем проблема?

Значит так, возникла необходимость проверить все письма пришедшие на Return-path:, с темой undelivered, ну или в роде этой и выдернуть оттуда email адреса.

Использовал следующий код: preg_match_all( '/[0-9a-z\._-]{3,15}@[0-9a-z\.-]{3,32}\.[a-z]{2,4}/i', $mail, $emails )

Регулярное выражение, конечно, не идеальное, но должно было бы выдернуть все email адреса.

Но работает, как-то, не стабильно - до того как среди писем были те, которые содержали точку в адресе (.), скрипт выдергивал email-ы вида - [url=mailto:name_lastname@anything.com]name_lastname@anything.com[/url], [url=mailto:blah_balh@foo.net]blah_balh@foo.net[/url].., т.е. те которые содержали символ подчеркивания. Не пойму в чем дело. Пытался использовать другие регулярные выражения, но безрезультатно.

Может проблема заключается в чем-то другом?
Аватара пользователя
mra214

Re: PHP - регулярные выражения: HELP

Сообщение mra214 »

И еще, проверил, что если указать номер письма (где содержатся 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() возвращает все письмо в виде простого текста.
Аватара пользователя
mra214

Re: PHP - регулярные выражения: HELP

Сообщение mra214 »

Сорри, нашел проблему.

Регулярка тут не причем, просто, надо было вынести preg_match_all() из цикла и проверить весь текст писем

или же объединять массив $emails с другим массивом... ну или еще как-нибудь
Аватара пользователя
gasha

Re: PHP - регулярные выражения: HELP

Сообщение gasha »

Вот строка [1][0], 0.15, 0.18, 0.16



Нужно из неё выцепить 0.15 0.18 и 0.16



Числа могут меняться, но, в любом случае, они будут дробными.



Помогите, пожалуйста.
Аватара пользователя
gasha

Re: PHP - регулярные выражения: HELP

Сообщение gasha »

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



$reg = "/[\d]{1,2}\.[\d]{1,2}/s";

preg_match_all ($pattern, $text, $res);
Аватара пользователя
Coutty

Re: PHP - регулярные выражения: HELP

Сообщение Coutty »

gasha, а нельзя строку просто обработать explode'ом?

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

Вернуться в «Вебмастеру»