为了账号安全,请及时绑定邮箱和手机立即绑定

这结果是怎么回事…

<?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 回答

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

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

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

0 回复 有任何疑惑可以回复我~
#1

坚持MyDream 提问者

你代码是怎样的
2016-09-02 回复 有任何疑惑可以回复我~
#2

坚持MyDream 提问者

哦哦,正确答案那个…
2016-09-02 回复 有任何疑惑可以回复我~
#3

慕尼黑8438124 回复 坚持MyDream 提问者

<?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 回复 有任何疑惑可以回复我~

对啊,为什么他没匹配

item 1</li>

            <li>item 2这一部分


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

坚持MyDream 提问者

PHP里面很多时候很多东西懂了就是不会说,就跟不懂文言文的说话用词一样
2016-09-02 回复 有任何疑惑可以回复我~
#2

坚持MyDream 提问者

我上面想问的应该这么说吧: 正确答案$p="/<li>(.*?)<\/li>/i" 这里少了对<ul>的匹配 应该是吧?=-=
2016-09-02 回复 有任何疑惑可以回复我~

你这写法匹配的位置不对

0 回复 有任何疑惑可以回复我~
#1

坚持MyDream 提问者

是不是跟我上面说的, 因为开头的<ul>[^\.]+ 的贪婪匹配,所以[^\.]+也贪婪匹配包含掉item 1了
2016-09-02 回复 有任何疑惑可以回复我~
#2

慕尼黑8438124 回复 坚持MyDream 提问者

恩,是的
2016-09-02 回复 有任何疑惑可以回复我~
#3

坚持MyDream 提问者 回复 慕尼黑8438124

正确答案$p="/<li>(.*?)<\/li>/i" 但是这里少匹配了一对<ul>。为什么答案还对了,如果执意要写上<ul>你写过吗
2016-09-02 回复 有任何疑惑可以回复我~

得到的是

item 1</li>

            <li>item 2

,item 2


0 回复 有任何疑惑可以回复我~
#1

坚持MyDream 提问者

你用我代码得到这个吗,还是你自己的答案
2016-09-02 回复 有任何疑惑可以回复我~
#2

慕尼黑8438124 回复 坚持MyDream 提问者

你的代码得到的是Array ( [0] => item 1 item 2 [1] => item 2 ) item 2
2016-09-02 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//57c8e43200014e2602100324.jpg

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

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这结果是怎么回事…

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信