php - 如何使用 PHP 从此代码中的锚标记中提取 id 和 url?
问题描述
我正在尝试从锚标记中提取文本、url(href) 和 id。到目前为止,我可以得到锚标签之间的文本。这是我的代码
<html>
<head>
</head>
<body>
<?php
$html =<a href='https://www.google.lk/' id='21'>Google</a> <a>Solution</a>"
preg_match_all('@<(a)>(.+?)</\1>@is', $html, $matches);
foreach ($matches[2] as $text) {
print "Text: $text\n";
echo "<br>";
}
?>
</body>
</html>
这将给出以下结果。
文本:解决方案
这样,我只能打印2个纯锚标签之间的文本(不带任何参数)。但是当有 href 和 id 等参数时,这是行不通的。我正在尝试修改上述代码以按以下方式打印文本(在 2 个锚标记之间)、URL(HREF)和 id
文字:谷歌网址:https ://www.google.lk/id :21
任何帮助将不胜感激。谢谢
解决方案
您的问题有点不清楚,所以如果我理解正确,您可以轻松提取锚标记 ( <a>
) 内容,但如果<a
标记包含 href 和 id,那么您认为它不起作用。另外,根据您的帖子标题,您还想提取href
和id
属性的值,它们可能存在也可能不存在。事实上,它们中的任何一个都可能丢失。
在这种情况下,您可以使用此正则表达式,
<(a)(?:\s+href=(['"])(?<href>[^'"]*)\2\s*)?(?:\s+id=(['"])(?<id>[^'"]*)\4\s*)?>(.+?)<\/\1>
解释:
<
--> 标签开始(a)
--> 期望标签名称仅为“a”,并将其捕获到组 1 中,以便通过在结束时的反向引用来匹配它(?:\s+href=(['"])(?<href>[^'"]*)\2\s*)?
--> 这部分匹配属性并在命名组中href
捕获其值,这是可选的href
(?:id=(['"])(?<id>[^'"]*)\4\s*)?
--> 这部分匹配id
属性并捕获id
命名组中的值,这也是可选的>
<a
标签结束(.+?)
--> 捕获<a
标签内部文本<\/\1>
--><a
通过反向引用匹配结束标记\1
这仍将匹配a
根据上述正则表达式的组 1 引用,并且还将捕获href
和id
属性的值,两者都是可选的。
让我知道这是否是你想要的。如有任何疑问,请告诉我。
推荐阅读
- colors - 尝试在swift4 xcode9中使用没有故事板或色轮的RGB颜色
- c++ - 解构 const 指针?
- sql-server - Excel没有从视图中提取所有记录
- c - 快速 C 随机布尔生成器
- python - pyspark.sql.types.Row 列出
- bash - 将整个提交复制到单独的目录中
- amazon-ec2 - /var/log/cloud-init-output.log 在 RHEL 7.5 上不存在
- qt - 是否可以在 XP 上运行 Qt 5.10 程序?
- jenkins - 詹金斯正在用其他文本替换构建步骤中的文本
- c# - c# 两个 web 参考,一个用于 live on 用于测试