如果语句解析不正确

时间:2012-01-31 21:05:27

标签: php regex if-statement

我试图将此if语句作为以下内容: 如果第一个字符串位置是.png,那么从大海捞针获得$ png1,但如果第一个字符串位置是.jpg,那么从大海捞针获取$ jpg1,但如果是.gif,则从haystack获取$ 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 :(得分:0)

您的正则表达式未正确包含,请将“#”替换为“/”。像这样:

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

<强>更新

我的错误,你的正则表达式很好。我会再看看。

您是否可以提供$html_part的示例?

答案 1 :(得分:0)

文体提示:而不是多个正则表达式,其唯一的区别是文件扩展名,如何:

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

并且只捕获找到的文件扩展名?这样可以节省4份几乎相同的正则表达式,在一个测试周期内完成所有这些工作

答案 2 :(得分:0)

代码中的错误只是

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

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

- 您设置$replace1,但使用$replace