【问题标题】:With PHP preg_match_all, get value of href使用 PHP preg_match_all,获取 href 的值
【发布时间】:2011-06-03 00:07:38
【问题描述】:

即使在阅读了本教程http://www.webcheatsheet.com/php/regular_expressions.php

这是我需要找到的:

<link type="text/html" rel="alternate" href="http://link"/>

它应该返回:

http://link

这是我尝试过的:

$find = preg_match_all(
    '/<link type="text/html" rel="alternate" href=".*',
    $file,
    $patterns2
);

你可以笑:)

提前感谢您的帮助和您的时间:)

【问题讨论】:

  • 您确定没有收到有关缺少分隔符的错误消息吗?

标签: php regex preg-match-all


【解决方案1】:

您必须将所需的文本块覆盖在括号中,例如(.*),这就是将返回的内容

这个对我有用

<?php
preg_match_all('/<link type="text\/html" rel="alternate" href="(.*)"\/>/','<link type="text/html" rel="alternate" href="http://link"/>',$patterns2);
print_r($patterns2);
?>

【讨论】:

  • 你为什么要这么做?你应该告诉他not 使用正则表达式解析 HTML。此外,&lt;link &lt;link foo href=".." 与您的正则表达式匹配。明白我的意思了吗?
  • 很抱歉我给了他他想要的东西。
  • 哦,好的,感谢您帮助我理解这一点。 :) 我很感激! @goreSplatter:感谢您的建议,:)
  • 如果它解决了您的问题,请将其标记为已解决(绿色耐克符号);)
  • 你给他的代码似乎给了他他想要的东西,但是错误且不可扩展,正如 goreSplatter 先生所指出的那样。
【解决方案2】:

使用simplexml

$html = '<link type="text/html" rel="alternate" href="http://link"/>';
$xml  = simplexml_load_string($html);
$attr = $xml->attributes();

使用 dom

$dom = new DOMDocument;
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('link');
$attr  = $nodes->item(0)->getAttribute('href');

【讨论】:

  • 我想我会使用 DOM,你更喜欢哪一个? (我只是听你的 youtube 视频,我很喜欢 :))
  • @Jeremy Dicaire - DOMDocument::loadHTML 将为您修复格式错误的 html,因此是首选。但简单意味着简单(如果 html 没有格式错误,我个人更喜欢 simplexml)
【解决方案3】:

使用正则表达式解析 (X)HTML 是 almost certainly wrong。使用专用的 XML 解析器。有很多可用于 php 的。

【讨论】:

  • 谢谢我刚读了这篇文章,有趣又实用……以后不会再犯同样的错误了:)
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
相关资源
最近更新 更多