<dl class="w1" style="width:500px">
<dt>转正工资:</dt>
<dd>2000-3000元
<!--2000-3000元/月  -->
,试用期薪资60%
</dd>
</dl>我想取<dd>..</dd>之间非<!-- -->中的内容,用[^...]好像不好写,我知道可以先把<!-- -->中内容替换掉再进行匹配。除此外有没有只用一个正则就能匹配成功的?

解决方案 »

  1.   

    /<dd>(.*?)(?:<\!\-\-.*?\-->)(.*?)/ius
      

  2.   

    /<dd>(.*?)(?:<\!\-\-.*?\-->)(.*?)<\/dd>/ius
      

  3.   

    chinmo你这个正则我怎么试不成功,你测试了吗
      

  4.   

    $s=<<<html
    <dl class="w1" style="width:500px">
    <dt>转正工资:</dt>
    <dd>2000-3000元
    <!--2000-3000元/月  -->
    ,试用期薪资60%
    </dd>
    </dl>
    html;
    preg_match('/<dd>(.+?)<\!--.+?-->(.+?)<\/dd>/s',$s,$m);
    echo $m[1].$m[2];
    2000-3000元,试用期薪资60%
      

  5.   

    那我不知道你怎么测试的了$s='<dl class="w1" style="width:500px">
    <dt>转正工资:</dt>
    <dd>2000-3000元
    <!--2000-3000元/月  -->
    ,试用期薪资60%
    </dd>
    </dl>';
    preg_match('/<dd>(.*?)(?:<\!\-\-.*?\-->)(.*?)<\/dd>/ius',$s,$m);
    echo $m[1].$m[2];反正我测试的没问题
      

  6.   

    $s='<dl class="w1" style="width:500px">
    <dt>转正工资:</dt>
    <dd>2000-3000元
    <!--2000-3000元/月  -->
    ,试用期薪资60%
    </dd>
    </dl>';
    preg_match('/<dd>(.*?)(?:<\!\-\-.*?\-->)(.*?)<\/dd>/ius',$s,$m);
    echo $m[1].$m[2];
    结果截图:
      

  7.   

    preg_match("/(.*?)<!--(.*?)-->(.*?)/", $str,$arr);
    echo $arr[2];
      

  8.   

    /<dd>(.*?)(?:<\!\-\-.*?\-->)(.*?)<\/dd>/is
    u 修饰符只对 utf-8 编码数据有效
    况且你也没有对中文进行处理其实这样不也很简单?
    preg_match('/<dd>(.*?)<\/dd>/is',$s,$m);
    echo strip_tags($m[1]);
      

  9.   

    难怪呢,我刚刚是gbk编码,难怪会显示不出来
      

  10.   

    xuzuning的方法不错,原来PHP还有strip_tags这个函数,真是方便多了。