<>
  <tr><td>12345</td></td>54321</td></tr>
</>preg_match_all("/<\s*>\s*(.*)\s*<\/>/",$txt,$tar);这是我写的匹配运行的结果
$tar[0]=<><tr><td>12345</td></td>54321</td></tr></>
$tar[1]=<tr><td>12345</td></td>54321</td></tr>一切看似没问题,正是我想要的结果。。但是,一旦写成<tr><td>12345</td>
</td>54321</td></tr>
也就是说,如果有换行符,句点号就不匹配了,,式子也就无效了。。我you写成preg_match_all("/<\s*>\s*[\s\S]*\s*<\/>/",$txt,$tar)  这个的形式,匹配了整条语句,我需要的,但是<tr><td>12345</td></td>54321</td></tr>
这个不匹配了。。打印分别是
第一次
array(2) {
  [0]=>
  array(1) {
    [0]=>
    string(51) "<><tr><td>12345</td></td>54321</td></tr></>"
  }
  [1]=>
  array(1) {
    [0]=>
    string(38) "<tr><td>12345</td></td>54321</td></tr>"
  }
}
第二次
array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(51) "<><tr><td>12345</td></td>54321</td></tr></>"
  }
}
求解惑,,谁能写出这个正则

解决方案 »

  1.   


    $str = <<<eof
    <>
      <tr><td>12345</td></td>54321</td></tr>
    </>
    eof;
    $str = <<<eof
    <>
      <tr>
        <td>12345</td>
        <td>54321</td>
      </tr>
    </>
    eof;
    preg_match('/<[^>]*>(.*?)<\/>/is',$str,$match);
    print_r($match);
      

  2.   

    是后面的/is修饰符吗??可以匹配\n,,但是加了?不是指非贪婪模式吗,,怎么可以匹配那么多字符
      

  3.   

    /i 是忽略大小写
    /s 是对“.”的匹配扩展,使之匹配所有字符 包括换行符(.*?)是非贪婪的,preg_match('/<[^>]*>(.*?)<\/>/is',$str,$match);
    匹配的顺序是,从<mar...>开始一直到</>结束 中间的任意字符。(.*)是贪婪墓室 preg_match('/<[^>]*>(.*?)<\/>/is',$str,$match);
    匹配的顺序是:从<mar...>开始一直到最后一个</>结束 中间的任意字符