用于嵌套 Div 标签的 PHP 正则表达式

2023-12-12

我需要一个可以与 PHP 的 preg_match_all() 一起使用的正则表达式来匹配 div 标签内的内容。 div 看起来像这样:

<div id="t1">Content</div>

到目前为止,我已经想出了这个正则表达式,它匹配所有 id="t[number]" 的 div

/<div id="t(\\d)">(.*?)<\\/div>/

问题是当内容包含更多 div、嵌套 div 时,如下所示:

<div id="t1">Content <div>more stuff</div></div>

关于如何使我的正则表达式与嵌套标签一起使用有什么想法吗?

Thanks


尝试使用解析器代替:

require_once "simple_html_dom.php";
$text = 'foo <div id="t1">Content <div>more stuff</div></div> bar <div>even more</div> baz  <div id="t2">yes</div>';
$html = str_get_html($text);
foreach($html->find('div') as $e) {
    if(isset($e->attr['id']) && preg_match('/^t\d++/', $e->attr['id'])) {
        echo $e->outertext . "\n";
    }
}

Output:

<div id="t1">Content <div>more stuff</div></div>
<div id="t2">yes</div>

在这里下载解析器:http://simplehtmldom.sourceforge.net/

编辑:更多的是为了我自己的娱乐,我尝试在正则表达式中做到这一点。这是我想出的:

$text = 'foo <div id="t1">Content <div>more stuff</div></div> bar <div>even more</div>
      baz <div id="t2">yes <div>aaa<div>bbb<div>ccc</div>bbb</div>aaa</div> </div>';
if(preg_match_all('#<div\s+id="t\d+">[^<>]*(<div[^>]*>(?:[^<>]*|(?1))*</div>)[^<>]*</div>#si', $text, $matches)) {
    print_r($matches[0]);
}

Output:

Array
(
    [0] => <div id="t1">Content <div>more stuff</div></div>
    [1] => <div id="t2">yes <div>aaa<div>bbb<div>ccc</div>bbb</div>aaa</div> </div>
)

还有一个小解释:

<div\s+id="t\d+">  # match an opening 'div' with an id that starts with 't' and some digits
[^<>]*             # match zero or more chars other than '<' and '>'
(                  # open group 1
  <div[^>]*>       #   match an opening 'div'
  (?:              #   open a non-matching group
    [^<>]*         #     match zero or more chars other than '<' and '>'
    |              #     OR
    (?1)           #     recursively match what is defined by group 1
  )*               #   close the non-matching group and repeat it zero or more times
  </div>           #   match a closing 'div'
)                  # close group 1
[^<>]*             # match zero or more chars other than '<' and '>'
</div>             # match a closing 'div'

现在也许你明白为什么人们试图说服你not为此使用正则表达式。正如已经指出的,如果 html 格式不正确,那将无济于事:我向你保证,正则表达式将比 html 解析器造成更大的输出混乱。此外,正则表达式可能会让您流血,您的同事(或维护您的软件的人)可能会在看到您所做的事情后来找您。 :)

你最好的选择是首先清理你的输入(使用TIDY或类似的),然后使用解析器来获取您想要的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于嵌套 Div 标签的 PHP 正则表达式 的相关文章

  • 使用 strtotime() 计算时间差(以小时和分钟为单位)[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions time1
  • 如何将自定义类型数组传递给 Postgres 函数

    我有一个自定义类型 CREATE TYPE mytype as id uuid amount numeric 13 4 我想将它传递给具有以下签名的函数 CREATE FUNCTION myschema myfunction id uuid
  • 如何防止 CakePHP 中重复表单提交?

    我发现 CakePHP 中的安全组件通过将令牌作为隐藏值添加到表单中来帮助防止 CSRF 我想知道是否有办法防止使用此组件或其他组件 帮助器重复表单提交 在之前的项目中 我使用了保存在会话中的唯一哈希值 该哈希值会在提交时读取并删除 重复提
  • 通过jquery传递搜索参数

    我有一个表单 如果用户输入搜索查询 其参数应通过 jquery 传递 并在获取结果后将结果加载到 div 容器中 由于我不太熟悉 jquery 我该怎么做 html currently the data is being displayed
  • 更新重复密钥上的复合密钥 [重复]

    这个问题在这里已经有答案了 我需要更新新行 如果两者都满足 date dat and empId who 作为复合键 但如果其中之一或两者不同 则插入 sql INSERT INTO history SET endtimestamp now
  • Javascript 函数与 php 一样吗?

    我在网站上使用 WebIM 提供聊天支持 我希望能够在客户端启动聊天会话时设置一个计时器 如果操作员 技术人员在 x 秒内没有响应 我希望页面重定向到客户端可以留言的另一个页面 有点像 请稍等 我们尝试联系您 这样 如果所有技术人员都太忙或
  • TCPDF/PHP 和字体:大写数字(血统数字?旧样式?)

    我得到了一种特殊的字体 上面有这样的数字 例如 正如您在 3 上看到的 一些数字下降到基线以下 我想要实现的是 这些数字不会低于该线 并且看起来像这样 在 Word 中 可以在相同字体的字符设置中轻松设置 如何在 TCPDF 中呈现数字 我
  • Facebook Graph API v3.1 开发人员访问令牌权限限制

    如您所知 Facebook 将其 API 升级到了 V3 1 现在正在慢慢地淘汰旧的 API 和应用程序 因此我们必须迁移到新的 API 他们做出了一些艰难的决定 这对垃圾邮件网站来说是好事 但对开发人员来说也很难 提醒 Graph API
  • PHP 相等变量

    我想知道是否有任何方法可以检查大量变量是否相等 如果我只有几个变量 我可以这样做 if a b a c b c 但是 如果我有 20 个变量 则需要一些时间来编写所有组合 还有其他方法吗 if count array unique arra
  • 通过搜索查找下一个文本并突出显示不起作用

    当在搜索框中搜索任何文本时 它可以找到并突出显示正确的文本 但是当搜索下一个 新文本时 它无法找到下一个 新文本 再次搜索时它不起作用 我无法找到问题 这JS below JS button search click function va
  • 数据表 - 服务器端处理 - 数据库列合并

    我目前正在使用 DataTables 1 10 5 服务器端处理功能 http www datatables net examples data sources server side html http www datatables ne
  • 正则表达式 - 从行首和行尾修剪空格[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Link
  • Python - 用逗号分割,跳过括号内的内容

    我需要用逗号分隔字符串 但我对这种情况有一个问题 TEXT EXAMPLE THIS IS A EXAMPLE BUT NOT WORKS FOR ME SECOND THIRD 我想拆分并得到 var 0 TEXT EXAMPLE THI
  • 如何在 Laravel 代码中使用 Artisan 命令?

    如何在我的 php caode Ex 中使用 Artisan 命令行 php artisan version to 您可以从控制器调用 Artisan 命令 如下所示 calling of migrate install Artisan c
  • 如何将 yii2 Restful api 中两个表的关系数据显示为 json 格式

    我遇到了将两个表中的数据显示为 JSON 格式并在 yii2 Restful api 上工作的问题 这是我的结构数据库 TABLE volunteer volunteer id int 11 NOT NULL auto increment
  • htaccess 301 重定向 - 删除查询字符串 (QSA)

    我一直在努力处理一些 htaccess 重定向 我只是花了一些时间在堆栈上阅读和搜索 但无法获得适合我的场景的答案 我正在将旧客户端网站的 301 重定向到新客户端 旧页面有参数查询 我想从网址中删除它 menu php idCategor
  • Laravel 5.3:护照实现 - {“error”:“invalid_client”,“message”:“客户端身份验证失败”}

    我按照中提到的确切步骤进行操作Laracast Laravel 5 3 的新增功能 Laravel Passport https laracasts com series whats new in laravel 5 3 episodes
  • 高效插入和更新时检查唯一性

    我的员工表中有 2 列 每列值必须是唯一的 staff code staff name staff id staff code staff name 1 MGT Management 2 IT IT staff 当向表中插入或更新项目时 我
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 如何获取 URL 中未知的 $_GET 值的数组?

    我正在使用一个在线购物车 它接受订购的商品并通过 URL 将其唯一 ID 传递到 process php 页面 所以 URL 看起来像这样 process php code 1 231 code 2 532 code 3 342 Anoth

随机推荐

  • 可以用SQL在数据库中进行二分查找吗?

    好的 我正在使用 C 编程语言访问一个简单的数据库 在 Microsoft SQL Server 上 目前 我正在使用 DataReader 对象来访问数据库 所以这是我的问题 是否可以对特定的数据进行二分搜索 在 C 中 以便我可以加快搜
  • Symfony2 - 如何从我的网址中删除“web/app_dev.php/”?

    当我希望我的 symfony 网站上线时 如何从我的网址中删除 web app dev php 这是开发时的默认url http localhost my symfony 2 web app dev php hello World 所以当我
  • NSMutableArray indexOfObject 返回一个非常大的数字

    我有一个 NSMutableArray 返回一个非常大的索引 po masterArray count lt returns 2 NSUInteger theIndex masterArray indexOfObject validateE
  • 在编译时选择随机数分布

    我正在使用编写测试TYPED TEST谷歌测试的功能 它允许我将测试推广到多种类型 我正在测试类型的类模板int and double 在测试中 我需要生成随机数 为此 我尝试使用std uniform int distribution
  • 数据描述符和非数据描述符的正确定义是哪一个?

    它们都是来自文档的Python 第一个 says 如果一个对象定义了两者 get and set 它被认为是一个数据描述符 仅定义的描述符 get 称为非数据描述符 它们通常用于方法 但也可能有其他用途 第二个 says 如果描述符定义 s
  • @aspnet_Membership_CreateUser 的密码

    应用 书呆子晚餐 该 SP 用于为新创建的用户插入密码 我试图找出应用程序代码中 Password 的来源 因为它是提供给该 SP 的 我在应用程序级别上查找它 但在应用程序级别上找不到它 有谁知道应用程序中哪里使用SP来传递 Passwo
  • WaitForSingleObject 不等待进程结束[重复]

    这个问题在这里已经有答案了 我想等待进程执行 calc exe 结束 但它不起作用 我的程序很快完成 而我的进程 calc exe 继续运行 我没有停止它 并且 WaitForSingleObject 立即返回 WAIT OBJECT 0
  • 比较Excel中的两列,插入空白行移动关联数据

    我在Excel中有大量数据需要按列进行匹配 具体来说 目前的数据如下 Column 1 Column 2 Column 3 1 1 aaaa 2 3 bbbb 3 4 cccc 4 理想情况下 我希望数据看起来像 Column 1 Colu
  • 如何在 Xamarin.Forms 中登录 Facebook

    我想制作一个 Xamarin Forms 项目 针对 iOS Android 和 Windows Phone 我的应用程序需要使用 Facebook 对用户进行身份验证 我应该独立实现每个平台的登录 还是使用手动流程 https devel
  • 在文本文件中打印 strace 命令的输出

    我需要将以下命令的结果写入文本文件 但该命令不起作用并且在使用时cat output txt什么也不给我看 请帮我解决这个问题吗 strace r y e read Program l o output txt thanks 为了将来的参考
  • 如何使用 C# 在 .Net 中的类型化对象列表中选择对象属性的所有值

    呃 我该如何解释这个 可能是一个简单的问题 但我的头脑很混乱 假设我有这样的课程 public class NestedObject public string NestedName get set public int NestedInt
  • 如何通过 C++ 检索已提交的内存

    我在这里找到了这个问题的几个答案 但没有一个能回答我的问题 我正在尝试追踪非托管 C 应用程序中的一些内存泄漏 通过阅读以下内容 内存 提交大小 似乎是监视内存使用情况时使用的最佳指标 http forum sysinternals com
  • 闭包语法

    function makeIncreaseByFunction increaseByAmount return function numberToIncrease return numberToIncrease increaseByAmou
  • 如何将响应数据中的特定数据保存到 csv 文件

    在我的 Web 服务测试计划中 我发送 SOAP 请求来创建用户 并在响应数据中发回用户名和唯一 ID 我想将该用户名和 uniqueid 保存到 CSV 文件中 谁能让我知道我怎样才能实现这一目标 您可以使用 Regex 后处理器提取数据
  • ClosedXML Excel 按多列中的值过滤行

    我有一个 Excel 文件 其中包含数千行和最多 BP 的列 我需要按 C 列和 BP 列中的特定值过滤所有这些行 我按照下面的代码测试了 ClosedXML 中的过滤器功能 当我将过滤器应用于一列时 一切正常 并且数据保存在新文件中 当我
  • 在同一测试中重用 pytest 夹具

    下面是使用的测试代码示例user用于设置测试的夹具 pytest fixture def user Setup db connection yield User email protected Close db connection def
  • 在子类的回调方法中调用父类的方法

    我有两个类 B 类扩展了 A 类 在 B 类中 我正在执行一些画布操作 因此需要调用回调来加载图像 在回调中我想调用父类的相同方法 但是 如果我将这行代码放入回调中 则会出现语法错误 Uncaught SyntaxError super 关
  • Scala 未来应用程序在完成之前终止

    只是试图让我的第一个 future 使用并运行 并进行类似于 Akka in Action MEAP 书中概述的示例的测试 我想调用一个网络服务并在将来返回结果 我正在使用 scalaxb 访问 Web 服务 我已经概述了下面的代码 但是当
  • 使用 Twilio SMS API,我可以在一篇文章中指定多个目标电话吗?

    Twilio 将长代码 SMS 限制为 1 次 秒 为了提高吞吐量 我将批次分成 5 个电话号码 我发现 Twilio API 的每个 HTTP POST 大约需要 0 5 秒 人们可能会认为使用 5 个 twilio 电话号码向 1000
  • 用于嵌套 Div 标签的 PHP 正则表达式

    我需要一个可以与 PHP 的 preg match all 一起使用的正则表达式来匹配 div 标签内的内容 div 看起来像这样 div Content div 到目前为止 我已经想出了这个正则表达式 它匹配所有 id t number