Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在id为第一个属性的div标记之间获取文本,然后是多个属性。只有正则表达式

如何在id为第一个属性的div标记之间获取文本,然后是多个属性。只有正则表达式
EN

Stack Overflow用户
提问于 2012-08-02 09:33:15
回答 1查看 2K关注 0票数 0

可能重复: 如何在id为第一个属性的div标记之间获取文本。只有正则表达式。

下面是这个场景

我使用这个正则表达式在div标记中使用id test1或tes2或test3获取文本

代码语言:javascript
运行
AI代码解释
复制
<div id = "test1">text</div>
<div id = "test2">text</div>
<div id = "test3">text</div>

$id_value = "test1" or "test2" or "test3";
$regex = "#\<div id=\"".$id_value."\"\>(.+?)\<\/div\>#s";

我唯一的要求是在下面的场景中从div标记获取文本

代码语言:javascript
运行
AI代码解释
复制
<div id="test" class="testing" style="color:red" etc etc .... more attributes >text</div>

例如,id是div标记的第一个属性,可以后面跟着n个属性。如何仅通过regex从这样的标记中提取文本。

我甚至试过

代码语言:javascript
运行
AI代码解释
复制
$regex = '#<div\s+.*?id="".$id_value."".*?>(.*?)</\s*div>#ims';

当$id_value = " test1“时,它返回div标记的文本,但是如果$id_value=" test2”,则返回节点test1和test2的文本值。如果$id_value="test3“,则返回所有3个节点的文本值。我只需要与特定id相关的文本值。只使用Regex .

请帮忙谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-02 09:35:40

不要使用RegExp来解析HTML。相反,使用PHP的DOM扩展,它可以正确地解析任何类型的HTML。

示例:

代码语言:javascript
运行
AI代码解释
复制
<?php

    $html = <<<HTML
<div id = "test1">text</div>
<div id = "test2">other text</div>
<div id = "test3">new text</div>
HTML;

    $id_list = array(
        "test1",
        "test2",
        "test3",
    );

    $doc = new DOMDocument();
    $doc->loadHTML($html);
    foreach ($id_list as $id) {
        $div = $doc->getElementById($id);
        if ($div == NULL) {
            echo "There's no element with an ID of $id<br>\n";
        }
        else {
            echo "$id's content is: " . $div->textContent . "<br>\n";
        }
    }

如果并且只有当您绝对必须使用RegExp时,我才会想到:

代码语言:javascript
运行
AI代码解释
复制
<?php

    $html = <<<HTML
<div id = "test1">text</div>
<div id = "test2">other text</div>
<div id = "test3">new text</div>
HTML;

    $id_list = array(
        "test1",
        "test2",
        "test3",
    );

    foreach ($id_list as $id) {
        $pattern = <<<REGEX
/
<div\s*                     #Opening Tag
(?:                         #Attributes before ID
    [a-z]+                  #Attribute name
    \s*=\s*                 #Equals
    (?:"[^"]*"|'[^']*')     #Attribute content
    \s*                     #Spaces?
)*                          #Many or none
(?:                         #ID Attribute
    id
    \s*=\s*
    (?:"$id"|'$id')         #Matches the ID
    \s*
)
[^>]*                       #Anything after ID
>                           #Closing Tag
([^<]*)                     #Actual content!
<\/div>
/xi
REGEX;

        preg_match_all($pattern, $html, $matches);
        var_dump($matches);
    }

请注意,如果使用此代码,unh̶oly͘͘c̀h̶i͏l҉d wį会流处女的血。国际货币基金组织( <center> )无法维持这一局面,为时已晚。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11782792

复制
相关文章
JS如何使用sessionStorage实现计数器功能
http://mpvideo.qpic.cn/0bc3rmaheaaadeaayq3ipvrvbc6dokfqa4qa.f10002.mp4?dis_k=4031fc91448cb61bf867060
itclanCoder
2022/12/07
1.5K0
JS如何使用localStorage实现计数器功能
http://mpvideo.qpic.cn/0b2esuabeaaakmag6bliabrvbfodckkqaeqa.f10002.mp4?dis_k=0168ae8cae63904a361d391
itclanCoder
2022/12/07
1.7K0
PBI-操作实战:怎么在表里增加合计数?
大海:你这个用的是简单的数据“表”,不带分类汇总功能的,要改为矩阵,具体方法如下:
大海Power
2021/08/30
1.2K0
如何在Python中使用静态变量在计数
今天,在用Python写一个统计一个文件下有多少文件的小标本时,遇到了一个很棘手的问题。如何在Python中使用静态变量来计数。然后,就在网上一通查找,找的方法都是利用类的方法来实现静态变量。说实话没有看太懂,另外我想如果用类成员当做静态变量来计数是不是很麻烦,我们还要编写ADD()函数,来实现加1操作(因为要计数吗?)。其实,主要原因还是没有看懂如何用类成员的方式实现静态变量,因此,我放弃了这种方法。
py3study
2020/01/08
1.7K0
如何优雅的设计数据导出功能?
对于一些报表性的后台,有些会提供数据导出功能。如果查询维度过多又都是耗时操作,那就像是开了潘多拉盒子,会造成比较恶劣的后果。
Criss@陈磊
2019/11/14
2K0
如何优雅的设计数据导出功能?
如何启用计算机的休眠,电脑休眠
在休眠时可以完全断开电脑的电源,自动关闭显示器和硬盘的时间设置为多长时间比较合适应看你需要了。
全栈程序员站长
2022/09/14
2K0
查询请求增加时,如何做主从分离?
依据一些云厂商的 Benchmark 的结果,在 4 核 8G 的机器上运行 MySQL 5.7 时,大概可以支撑 500 的 TPS 和 10000 的 QPS。这时,运营负责人说正在准备双十一活动,并且公司层面会继续投入资金在全渠道进行推广,这无疑会引发查询量骤然增加的问题。那么当查询请求增加时,应该如何做主从分离来解决问题。
码农架构
2020/10/26
4410
查询请求增加时,如何做主从分离?
如何使用Hunt-Sleeping-Beacons识别休眠的Beacon
 关于Hunt-Sleeping-Beacons  Hunt-Sleeping-Beacons项目的主要功能是帮助广大研究人员在运行时或其他正在运行进程的上下文场景中识别休眠的Beacon。为了实现这个目标,我们通过观察发现,Beacon会在回调过程中尝试调用sleep函数。在调用sleep的过程中,会将线程的状态设置为“DelayExecution”,而我们就可以将其作为第一个指标来识别线程是否在执行某个Beacon。 将所有状态为“DelayExecution”的线程全部枚举出来之后,我们就可以通过多种
FB客服
2023/03/30
5090
如何使用Hunt-Sleeping-Beacons识别休眠的Beacon
64.如何为爬虫程序增加限速功能
爬虫程序,在爬取网站速度过快时,就会面临封禁的风险。因此,为了降低这样的风险,我们可以在两次爬取之间,添加一定的延时,从而起到限速的作用。下面我们先来编写一个具有限速功能的程序。
TalkPython
2020/02/17
7240
如何实现RTS游戏中鼠标在屏幕边缘时移动视角功能
本文简单介绍如何在Unity中实现即时战略游戏中鼠标在屏幕边缘的时候移动视角的功能,如图所示:
CoderZ
2022/12/26
1.2K0
如何实现RTS游戏中鼠标在屏幕边缘时移动视角功能
MCU如何实现对外部脉冲信号的计数功能?
原理很简单,利用GPIO的上升沿或者下降沿中断,进中断的次数就是脉冲的个数。只需要在中断服务函数里计数即可。
用户2366192
2023/03/06
9360
MCU如何实现对外部脉冲信号的计数功能?
【Android休眠】之Android休眠机制
休眠,简而言之就是设备在不需要工作的时候把一些部件、外设关掉(掉电或让它进入低功耗模式)。 为什么要休眠呢?一言以蔽之:省电。 休眠分主动休眠和被动休眠。主动休眠:比如我电脑不用了,就通过设置让系统进入休眠模式;被动休眠:系统检测到自己闲的慌,为了节约故,自己就休眠去了。
易寒
2021/12/31
2.1K0
使用 AI 为 Web 网页增加无障碍功能
根据世界健康组织的统计,全球约有 2.85 亿位视力障碍人士,仅美国就有 810 万网民患视力障碍。
疯狂的技术宅
2019/03/28
8830
使用 AI 为 Web 网页增加无障碍功能
【Android休眠】之Android休眠机制
休眠,简而言之就是设备在不需要工作的时候把一些部件、外设关掉(掉电或让它进入低功耗模式)。
233333
2020/01/02
4.5K0
Typecho增加打赏功能
增加custom.php 路径 usr/themes/Joe/public <?php // 收款设置 $ZNPaySet = new Typecho_Widget_Helper_
小东东
2023/03/20
5140
增加MATLAB屏幕截图功能
借助Java或者Python实现截取屏幕指定矩形区域 Java实现 function outputImage=screenCapture(subRegion,outputFile) robo = java.awt.Robot; if ~exist('subRegion','var') || isempty(subRegion) %获取屏幕尺寸 t = java.awt.Toolkit.getDefaultToolkit(); rectangle = java.awt.Rectangl
万木逢春
2019/04/30
1.7K0
为软件增加支付功能
https://openhome.alipay.com/develop/manage
灬沙师弟
2023/09/06
2990
为软件增加支付功能
点击加载更多

相似问题

在使用休眠功能时,如何增加计数?(C语言)

20

JavaScript休眠功能

20

如何关闭睡眠/休眠功能?

110

在使用exec时增加计数器

32

休眠生成计数(1)

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文