近期做一个有表情的评论,在form中选择了表情以后相应的符号会输入到表单中
格式是这样的[@F_1@]代表F_1.gif,[@F_2@]代表F_2.gif,……,[@F_39@]代表F_39.gif
待表单提交过了后需要将表单里诸如[@F_1@]的换成对应的地址,就是将[@F_1@]换成<img src="images/F_1.gif">,[@F_2@]换成<img src="images/F_2.gif">,……,[@F_39@]换成<img src="images/F_39.gif">然后再将数据插入到数据库,由于正则表达式这块知识比较薄弱,所以老是出错,现我将自己的表达式写上,请各路高手给予指点<?php
$ereg="/ˆ(\[@)F_[0-3]?[0-9]{1}(@\])$/";

$str="[@F_12@]";

$rep_str=preg_match_all($ereg,$str,$counts);

if($rep_str>0){

echo "匹配了:".$rep_str."次";
}else{

echo "匹配了零次";

}?>
显示匹配零次然后改为
<?php
$ereg="/ˆ(\[@)F_[0-39]{1}(@\])$/";

$str="[@F_12@]";

$rep_str=preg_match_all($ereg,$str,$counts);

if($rep_str>0){

echo "匹配了:".$rep_str."次";
}else{

echo "匹配了零次";

}?>
还是显示“匹配了零次”由于情况急切,所以曹某人跪求各路高手指点,在此谢过了!

解决方案 »

  1.   

    $pattern ="/\[@F_[0-3]?[0-9]{1}@\]/"; $str="[@F_39@]";

    $rep_str=preg_match($pattern,$str);

    if($rep_str>0){

    echo "匹配了:".$rep_str."次";
    }else{

    echo "匹配了零次";
      

  2.   

    还真麻烦,其实没那么麻烦
    你用我的思路来做吧
    $a='[@F_1@]';
    Echo '<img src="',Trim($a,'[@]'),'.gif">';
      

  3.   

    楼上的做法倒是不错其实楼主写的就差那么一点了,只是$ereg="/ˆ(\[@)F_[0-39]{1}(@\])$/";写错了,把^写成了ˆ,有区别的,还有括符用错了,所以
    <?php
    $ereg="/^\[@(F_[0-3]?[0-9]{1})@\]$/";//改改就好,当然还可以写成"/^\[@(F_\d+)@\]$/"甚至更简单的
    $str="[@F_12@]";$rep_str=preg_match_all($ereg,$str,$counts);if($rep_str>0){echo "匹配了:".$rep_str."次";
    }else{echo "匹配了零次";}echo "<img src='images/".$counts[1][0].".gif'>";//再送个地址给楼主?>记得结贴,我要全部分数
      

  4.   

    $s = <<< TEXT
    近期做一个有表情的评论,在form中选择了表情以后相应的符号会输入到表单中
    格式是这样的[@F_1@]代表F_1.gif,[@F_2@]代表F_2.gif,……,[@F_39@]代表F_39.gif
    待表单提交过了后需要将表单里诸如[@F_1@]的换成对应的地址,就是将[@F_1@]换成<img src="images/F_1.gif">,[@F_2@]换成<img src="images/F_2.gif">,……,[@F_39@]换成<img src="images/F_39.gif">然后再将数据插入到数据库,
    TEXT;
    echo preg_replace('/\[@(F_\d+)@\]/is', '<img src="images/\\1.gif">', $s);近期做一个有表情的评论,在form中选择了表情以后相应的符号会输入到表单中
    格式是这样的<img src="images/F_1.gif">代表F_1.gif,<img src="images/F_2.gif">代表F_2.gif,……,<img src="images/F_39.gif">代表F_39.gif
    待表单提交过了后需要将表单里诸如<img src="images/F_1.gif">的换成对应的地址,就是将<img src="images/F_1.gif">换成<img src="images/F_1.gif">,<img src="images/F_2.gif">换成<img src="images/F_2.gif">,……,<img src="images/F_39.gif">换成<img src="images/F_39.gif">然后再将数据插入到数据库,
      

  5.   

    多谢各位参与,以上都不错,不过相比之下两位最有见解
    其中二楼给出的正则表达式是正确的,三楼的想法化复杂为简单,很好!
    下面我给出我的代码,以供参考
            $pre_content=$_POST['content'];/*$pre_content是没有处理前传过来的评论框里的内容,下面就是要对评论框的内容进行替换,然后存到数据库*/ $ereg_1="/\[@F_[0-3]?[0-9]{1}@\]/";/*正则表达式*/

    $num=$rep_str=preg_match_all($ereg_1,$pre_content,$counts);


    if($num>0){

    $ereg_2="@";

    for($j=0;$j<$num;$j++){

    $string_2[$j]=spliti($ereg_2,$counts[0][$j]);

    $replace_str="<img src='images/".$string_2[$j][1].".gif'>";

      $pre_content=preg_replace("/\\".$string_2[$j][0]."@".$string_2[$j][1]."@"."\\".$string_2[$j][2]."/",$replace_str,$pre_content);/*注意,此处最容易出错因为每个要替换的都有"[]"而这个符号是正则表达式里面的需要进行格式化,否则就会出现[<img src="F_12">]等类似的情况*/

    }

    }        $content=$pre_content;/*$content是处理后的内容*/        echo $content;感谢大家的参与