请教php正则关于换行匹配

菜鸟中的小公鸡 发布于 2013/06/01 18:34
阅读 3K+
收藏 1
PHP

<dl class="huankuan" style=" margin-top:15px;">
                    <dd>AAAA</dd>
                    <dd>BBBB</dd>
                    <dd></dd>
                </dl>
我只想取得AAAA,要怎么来写这个正则?

只想取得BBBB时,正则要怎么来写?

正在学习PHP的正则,在其中碰到这些问题,希望各位能个帮忙解答一些,不胜感激!




加载中
0
MeiKai
MeiKai
匹配换行符的在正则表达式尾部加s,具体看 http://php.net/manual/zh/reference.pcre.pattern.modifiers.php
菜鸟中的小公鸡
菜鸟中的小公鸡
尝试了在尾部加S,可是想取后面的数据,取不到。
0
MeiKai
MeiKai
preg_match("/<dl class=\"huankuan\" style=\" margin-top:15px;\">(.*?)<\/dl>/s",$html,$matches1);//提取dd部分
preg_match_all("/(<dd>(.*?)<\/dd>)/",$matches1[1],$matches2);
print_r($matches2);//提取dd里面的文字

菜鸟中的小公鸡
菜鸟中的小公鸡
第一条匹配并不能完全的取出全部符合的内容,只能取两三条。
洪云
我来试试这种方法。
0
洪云

我用正则表达式时,也遇到过<div>太长的情况,也匹配不了。

你这样试试,看可不可以:

(1)从一大段HTML源码中使用strstr()提取出你的这段代码

<dlclass="huankuan"style=" margin-top:15px;">

2                     <dd>AAAA</dd>
3                     <dd>BBBB</dd>
4                     <dd></dd>
5                 </dl>
(2)再在你的这段代码中直接使用

$pattern = '/<dd>(.*?)<\/dd>/';

$str = '你的那段代码';

preg_match_all($patten,$str,$match);

$match[1]就是你需要的数据。


0
MeiKai
MeiKai

匹配两次:

preg_match("/<dl class=\"huankuan\" style=\" margin-top:15px;\">(.*?)<\/dl>/s",$html,$matches1);/*提取dd部分*/
preg_match_all("/(<dd>(.*?)<\/dd>)/",$matches1[1],$matches2);
print_r($matches2);/* 提取dd的内容 */

0
菜鸟中的小公鸡
菜鸟中的小公鸡

引用来自“MeiKai”的答案

匹配两次:

preg_match("/<dl class=\"huankuan\" style=\" margin-top:15px;\">(.*?)<\/dl>/s",$html,$matches1);/*提取dd部分*/
preg_match_all("/(<dd>(.*?)<\/dd>)/",$matches1[1],$matches2);
print_r($matches2);/* 提取dd的内容 */

不能取出全部的数据,只能取两三条。
0
MeiKai
MeiKai

引用来自“菜鸟中的小公鸡”的答案

引用来自“MeiKai”的答案

匹配两次:

preg_match("/<dl class=\"huankuan\" style=\" margin-top:15px;\">(.*?)<\/dl>/s",$html,$matches1);/*提取dd部分*/
preg_match_all("/(<dd>(.*?)<\/dd>)/",$matches1[1],$matches2);
print_r($matches2);/* 提取dd的内容 */

不能取出全部的数据,只能取两三条。
什么两三条?不是提取了全部的dd里面的数据吗?
菜鸟中的小公鸡
菜鸟中的小公鸡
没有,没有全部,只取出了其中的两条,一开始我以为是HTML代码不一样,再次确认后 HTML代码全部都是一样的,可是只能取其中的两三条。
0
MeiKai
MeiKai

引用来自“MeiKai”的答案

引用来自“菜鸟中的小公鸡”的答案

引用来自“MeiKai”的答案

匹配两次:

preg_match("/<dl class=\"huankuan\" style=\" margin-top:15px;\">(.*?)<\/dl>/s",$html,$matches1);/*提取dd部分*/
preg_match_all("/(<dd>(.*?)<\/dd>)/",$matches1[1],$matches2);
print_r($matches2);/* 提取dd的内容 */

不能取出全部的数据,只能取两三条。
什么两三条?不是提取了全部的dd里面的数据吗?
你是要提取所有dl里面的dd?我的答案只是针对你发的html代码
0
MeiKai
MeiKai

引用来自“MeiKai”的答案

引用来自“菜鸟中的小公鸡”的答案

引用来自“MeiKai”的答案

匹配两次:

preg_match("/<dl class=\"huankuan\" style=\" margin-top:15px;\">(.*?)<\/dl>/s",$html,$matches1);/*提取dd部分*/
preg_match_all("/(<dd>(.*?)<\/dd>)/",$matches1[1],$matches2);
print_r($matches2);/* 提取dd的内容 */

不能取出全部的数据,只能取两三条。
什么两三条?不是提取了全部的dd里面的数据吗?
那你把第一函数换成preg_match_all就可以,不过第二个相应要被匹配的参数需要改下 
0
MeiKai
MeiKai

引用来自“MeiKai”的答案

引用来自“MeiKai”的答案

引用来自“菜鸟中的小公鸡”的答案

引用来自“MeiKai”的答案

匹配两次:

preg_match("/<dl class=\"huankuan\" style=\" margin-top:15px;\">(.*?)<\/dl>/s",$html,$matches1);/*提取dd部分*/
preg_match_all("/(<dd>(.*?)<\/dd>)/",$matches1[1],$matches2);
print_r($matches2);/* 提取dd的内容 */

不能取出全部的数据,只能取两三条。
什么两三条?不是提取了全部的dd里面的数据吗?
那你把第一函数换成preg_match_all就可以,不过第二个相应要被匹配的参数需要改下 
不过你要匹配所有dl标签的dd,第二个函数就要循环调用
返回顶部
顶部