有如下一段字符<test id="xx" class="xxx">content1</test>
<test id="yy" class="yyy">content2</test>
<test id="zz" class="yyy">content3</test>
<test id="aa" class="yyy">content4</test>请问如何用preg_match_all把content2 content3 content4 解析出来呢,就是依靠test和class两个参数网上找了些方法,但好像都觉得用起来不是很顺手,求最简单的方法,谢谢

解决方案 »

  1.   


    $s = <<<test
    <test id="xx" class="xxx">content1</test>
    <test id="yy" class="yyy">content2</test>
    <test id="zz" class="yyy">content3</test>
    <test id="aa" class="yyy">content4</test>
    test;
    preg_match_all('/(?<=>)[a-z0-9]+/i',$s,$arr);
    print_r($arr);
      

  2.   

    $s = <<<test
    <test id="xx" class="xxx">content1</test>
    <test id="yy" class="yyy">content2</test>
    <test id="zz" class="yyy">content3</test>
    <test id="aa" class="yyy">content4</test>
    test;
    preg_match_all('/<test[^>]*class="yyy">([a-z0-9]+)<\/test>/is',$s,$arr);
    print_r($arr[1]);
      

  3.   

    可以在里面加上\s*之类的作些防漏的匹配
    $s = <<<test
    <test id="xx" class="xxx">content1</test>
    <test id="yy" class="yyy">content2</test>
    <test id="zz" class="yyy">content3</test>
    <test id="aa" class="yyy">content4</test>
    test;
    preg_match_all('/test[^>]+yyy">([^<]+)</si',$s,$arr);
    print_r($arr[1]);
      

  4.   

    试了一下,确实可用,请问'/test[^>]+yyy">([^<]+)</si'这里最后的/si是什么意思呢
    另外,打印输出的时候,显示两个array,能够只显示一个吗
    如果在内容中间加点东西,用echo来打印输出可否
    比如我把输出给显示为content2***content3***content4这样的格式
      

  5.   

    原来si是空格和大小写的意思
    我实际需要解析的内容不是这么规范的,而是 <test id="xx" class="yyy" mov="mdm">测试内容1</test> <test id="xx" class="yyy" mov="mdm">测试内容2</test> 这样连在一起的一大段,有很多行,然后保存在一个$content变量中,根据test和class来把测试内容提取出来,想在中间加上分隔符,最后一起echo出来只是提问的时候把它简化了
    但发现用这个方法来解析,结果一直为空,请问是因为实际情况中数据连在一起所导致的吗,还是因为后面还有个mov导致了不匹配
      

  6.   

    弄出来了,是后面这个mov的问题,多谢大家,结贴