Если синтаксический анализ оператора неверен - PullRequest
0 голосов
/ 01 февраля 2012

Я пытаюсь получить это, если утверждение будет следующим: если первая строковая позиция .png, то получить $ png1 из стога сена, но если первая строковая позиция .jpg, то получить $ jpg1 из стога сена, но если это .gif, получить $ gif1 из стога сена, иначе если ни одна из них не найдена, тогда строковая позиция - .bmp, поэтому получим $ bmp1

Вот что я пробовал, но он не анализируется правильно:

<?php
// if first occurence is .png get $png1 needle from haystack
if (preg_match('#cid:([^"@]*).png@([^"]*)#', $html_part))           
{           $find = '#cid:([^"@]*).png@([^"]*)#';   
    $replace1 = $png1;
    $html_part = preg_replace($find, $replace, $html_part);
}
// if first occurence is .jpg get $jpg1 needle from haystack
elseif (preg_match('#cid:([^"@]*).jpg@([^"]*)#', $html_part)) 
{           $find = '#cid:([^"@]*).jpg@([^"]*)#';   
    $replace1 = $jpg1;
    $html_part = preg_replace($find, $replace, $html_part);
}
// if first occurence is .gif then get $gif1 needle from haystack
elseif (preg_match('#cid:([^"@]*).gif@([^"]*)#', $html_part)) 
{           $find = '#cid:([^"@]*).gif@([^"]*)#';
    $replace = $gif1;
    $html_part = preg_replace($find, $replace, $html_part);
}
// if first occurence is .bmp then get $bmp1 needle from haystack
else
{           $find = '#cid:([^"@]*).bmp@([^"]*)#';
    $replace = $bmp1;
    $html_part = preg_replace($find, $replace, $html_part);
}
?>

Пример $html_part с добавлением разрывов строк для отображения:

<b>Bold Text.</b> <i>Italicized Text.</i> <u>Underlined Text.</u> Plain Unformatted Text.
<img width=183 height=183 id="Picture_x0020_3" src="cid:image001.png@01CCCB31.E6A152F0"
alt="Description: Description: Description: cid:image001.png@01CCC701.5A896430">
<img width=153 height=145 id="Picture_x0020_2" src="cid:image002.jpg@01CCCB31.E6A152F0"
alt="Description: Description: cid:image002.jpg@01CCCB1D.D3A29740"><img width=182 height=123
id="Picture_x0020_1" src="cid:image003.jpg@01CCCB31.E6A152F0"
alt="Description: Description: cid:image003.jpg@01CCCB1D.D3A29740">`

Ответы [ 3 ]

0 голосов
/ 01 февраля 2012

Стилистический совет: вместо нескольких регулярных выражений, единственным отличием которых является расширение файла, как насчет:

if (preg_match('#cid:([^"@]*).(gif|png|jpg|bmp)@([^"]*)#', $html_part)) {
    $find = '#cid:([^"@]*).{$html_part[2]}@([^"]*)#';
                           ^^^^^^^^^^^^^^^---captured file extension

и просто захватить найденное расширение файла?Это сэкономит вам 4 копии почти идентичных регулярных выражений, сделайте все за один цикл тестирования

0 голосов
/ 13 марта 2014

Ошибки в вашем коде просто

    $replace1 = $png1;
    $html_part = preg_replace($find, $replace, $html_part);

и

    $replace1 = $jpg1;
    $html_part = preg_replace($find, $replace, $html_part);

- вы установили $replace1, но используете $replace.

0 голосов
/ 01 февраля 2012

Ваше регулярное выражение содержится неверно, замените '#' на '/'.Вот так:

preg_match('/cid:([^"@]*).png@([^"]*)/', $html_part)

ОБНОВЛЕНИЕ

Моя ошибка, ваше регулярное выражение в порядке.У меня будет другой взгляд.

Можете ли вы привести пример $html_part?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...