9
回答
请教php正则关于换行匹配
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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

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

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




PHP
举报
共有9个答案 最后回答: 5年前
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里面的文字

--- 共有 2 条评论 ---
菜鸟中的小公鸡第一条匹配并不能完全的取出全部符合的内容,只能取两三条。 5年前 回复
洪云我来试试这种方法。 5年前 回复

我用正则表达式时,也遇到过<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]就是你需要的数据。


匹配两次:

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的内容 */

引用来自“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的内容 */

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

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

引用来自“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里面的数据吗?
--- 共有 1 条评论 ---
菜鸟中的小公鸡没有,没有全部,只取出了其中的两条,一开始我以为是HTML代码不一样,再次确认后 HTML代码全部都是一样的,可是只能取其中的两三条。 5年前 回复

引用来自“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代码

引用来自“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就可以,不过第二个相应要被匹配的参数需要改下 

引用来自“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,第二个函数就要循环调用
顶部