当前位置: 首页 > 知识库问答 >
问题:

PHP Preg_split选择HTML标记的内部内容

莫宝
2023-03-14

我有一个字符串,其中包含各种 HTML 标记中的文本。我需要清理 HTML 标签本身,因此

<p class="MsoNormal" style="text-align: justify;">1939&nbsp;After considerable negotiation between the Kemp estate and the Dunwich Trusts, the charter was purchased and returned to Dunwich.</p>

成为

<p>1939&nbsp;After considerable negotiation between the Kemp estate and the Dunwich Trusts, the charter was purchased and returned to Dunwich.</p>

我是这么做的

$value = preg_replace("/<p[^>]+>/", "<p>", $value);

但我需要保留的内容

我打算通过运行一个循环并提取锚标签,然后处理每个锚标签,在空格处拆分并保持以href=title=等开头的分解数组值来做到这一点。

但现在我的问题是这样的:

如何拆分字符串以获取

如果我这样做

$value = preg_split("/<a[^>]+>/", $value);

然后value返回锚标签外部的内容,而不是锚标签内部的内容。我不知道锚标签内部是什么,所以只能基于

我想用一个字符串制作一个锚标记数组,这样:

<h2>Headlines</h2>
<a href="index.php?id=11">Charter Returned to Dunwich in 1939</a>  
<a href="index.php?id=10">Thomas Gardner Visits Dunwich</a>  
<a href="index.php?id=9">Treasure Chest Purchases</a>  
<a href="index.php?id=8">Dunwich Charter 1215</a>  
<a href="index.php?id=7">Why did Dunwich have a Charter?</a>  
</div> 

可以给我:

$array[0] = 'a href="index.php?id=11"';
$array[1] = 'a href="index.php?id=10"';
$array[2] = 'a href="index.php?id=9"';
$array[3] = 'a href="index.php?id=8"';
$array[4] = 'a href="index.php?id=7"';

共有1个答案

章城
2023-03-14

只需使用preg_match_all

$re = "/<a[^>]+>/"; 
$str = "<h2>Headlines</h2>\n<a href=\"index.php?id=11\">Charter Returned to Dunwich in 1939</a>  \n<a href=\"index.php?id=10\">Thomas Gardner Visits Dunwich</a>  \n<a href=\"index.php?id=9\">Treasure Chest Purchases</a>  \n<a href=\"index.php?id=8\">Dunwich Charter 1215</a>  \n<a href=\"index.php?id=7\">Why did Dunwich have a Charter?</a>  \n</div> "; 
preg_match_all($re, $str, $matches);

$匹配将包含:

a href="index.php?id=11"
a href="index.php?id=10"
a href="index.php?id=9"
a href="index.php?id=8"
a href="index.php?id=7"

看一下演示程序。

 类似资料:
  • 我有一个任务,需要在web应用程序内部的几个页面上添加一些标记。文本已经存在,但包装在其他标签中,我需要将其转换为h1标签。当我这样做的时候,我需要在页面上保持相同的设计,所以设计明智,什么都不应该改变。我们需要谷歌机器人的h1标签。 让我在下面给你展示一个例子。目前我有一页是这样的: null null 我需要在那里插入。我在internet上读到,在中添加不是一个好主意,因为我的第一个想法是用

  • 我需要在双引号内加粗。 当我把

  • 问题内容: 我有一个将数组显示为单个选择的选项: 我想做的是它第一次加载时应显示默认值。选择一个选项并关闭对话框后,我再次弹出相同的对话框,它应显示我先前做出的选择并滚动到该对话框。 我该如何完成? 截至目前,我可以获取所选职位,但是接下来该怎么办? 问题答案: 您可以将所选值存储在您的变量中,也可以使用SharedPreferences

  • 我有这个图像,我想选择其中的所有地图,包括使用python的名称。 我用OpenCv试过了 但是我总是得到这个错误: OpenCV(4.2.0)C:\projects\OpenCV python\OpenCV\modules\imgproc\src\templammatch。cpp:1104:错误:(-215:断言失败)(深度==CV\U 8U | |深度==CV\U 32F) 我该怎么做?请帮帮

  • 我的数据库中有100000个地址(即记录)。 它们中的每一个都有自己的坐标(纬度和经度)。 现在,考虑到用户的地理位置(纬度和经度),我只想在地图上显示5英里范围内的地址(使用Google maps v3 API)。 这意味着通常在100000个地址中只需显示5或6个地址。 一种解决方案可能是检索所有记录,并在Java中应用一个公式来计算每个地址的距离,并且仅当它在范围内时才显示它。 这将浪费处理

  • 我得到了下面的SQL,我想将其转换为有效的HQL。这方面的问题是,不允许根据文档加入子查询。尽管这些是旧文档(v3.3),但在hibernate 5.3中,这一节似乎仍然适用。 我想出了这个HQL: 尝试执行此HQL查询会导致此异常 这将提示 在. 有没有办法加入HQL中的子查询?如果不是,那么获得与具有HQL的SQL相同的结果的最佳方法是什么? 我不擅长转换