这结果是怎么回事…

来源:3-6 查找所有匹配结果

坚持MyDream

2016-09-02 10:28

<?php

$str = "<ul>

            <li>item 1</li>

            <li>item 2</li>

        </ul>";

$p='!<ul>[^\.]+<li>(.*)</li>[^\.]+</ul>!i';//在这里补充代码,实现正则匹配所有li中的数据

preg_match($p,$str,$matches);

print_r($matches);

echo "\n";

print_r($matches[1]);


写回答 关注

6回答

  • 慕尼黑8438124
    2016-09-02 10:53:06

    Array
    (
       [0] => Array
           (
               [0] =>item 1[1] =>item 2)

       [1] => Array
           (
               [0] => item 1
               [1] => item 2
           )
    )

    原来是输出的问题,我原来的代码只是输出下标为一的

    慕尼黑843... 回复坚持MyDr...

    <?php $str = "<ul> <li>item 1</li> <li>item 2</li> </ul>"; //在这里补充代码,实现正则匹配所有li中的数据 $p = "/<li>(.*)<\/li>/i"; preg_match_all($p, $str, $matches); print_r($matches[1]);

    2016-09-02 11:22:46

    共 3 条回复 >

  • 慕尼黑8438124
    2016-09-02 10:50:40

    对啊,为什么他没匹配

    item 1</li>

                <li>item 2这一部分


  • 慕尼黑8438124
    2016-09-02 10:49:34

    不是这样的,他是匹配了<li></li>里面的部分啊,并不是<ul><li>  </li></ul>的部分

    坚持MyDr...

    我上面想问的应该这么说吧: 正确答案$p="/<li>(.*?)<\/li>/i" 这里少了对<ul>的匹配 应该是吧?=-=

    2016-09-02 11:22:33

    共 2 条回复 >

  • 慕尼黑8438124
    2016-09-02 10:36:18

    你这写法匹配的位置不对

    坚持MyDr... 回复慕尼黑843...

    正确答案$p="/<li>(.*?)<\/li>/i" 但是这里少匹配了一对<ul>。为什么答案还对了,如果执意要写上<ul>你写过吗

    2016-09-02 10:46:07

    共 3 条回复 >

  • 慕尼黑8438124
    2016-09-02 10:34:58

    得到的是

    item 1</li>

                <li>item 2

    ,item 2


    慕尼黑843... 回复坚持MyDr...

    你的代码得到的是Array ( [0] => item 1 item 2 [1] => item 2 ) item 2

    2016-09-02 10:39:24

    共 3 条回复 >

  • 坚持MyDream
    2016-09-02 10:32:58

    http://img.mukewang.com/57c8e43200014e2602100324.jpg

    这里是不是(.*?)值匹配为item 2了。  

    开头的<ul>[^\.]+直接化为XXXitem1XX然后接(.*?)了

PHP进阶篇

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

181835 学习 · 2577 问题

查看课程

相似问题