php从HTML中获取所有样式表标记中的href值的正则表达式是什么?

php从HTML中获取所有样式表标记中的href值的正则表达式是什么?,php,css,regex,preg-match-all,Php,Css,Regex,Preg Match All,如果标记不总是有序的,那么使用regex和preg_match_all获取所有href标记以获取href值的一般方法是什么 例如: <link href="foo.css" rel="stylesheet" type="text/css"/> <link type="text/css" href="bar.css" rel="stylesheet"/> <link rel="stylesheet" type="text/css" href="bar1.css"/&g

如果标记不总是有序的,那么使用regex和preg_match_all获取所有href标记以获取href值的一般方法是什么

例如:

<link href="foo.css" rel="stylesheet" type="text/css"/>
<link type="text/css" href="bar.css" rel="stylesheet"/>
<link rel="stylesheet" type="text/css" href="bar1.css"/>
<link type="text/css" href="bar2.css" rel="stylesheet"></link>
<link href="path/foo.css" rel="stylesheet" type="text/css"/>
我想说:

preg_match_all('/href=\"([a-z1-9\/.]+)\"/img', $head, $matches)

您要查找的正则表达式如下所示,但需要进一步细化:

<link\s+(?:[^>]*?\s+)?href="([^"]*)"
]*?\s+?href=“([^”]*)”
测试

<link href="foo.css" rel="stylesheet" type="text/css"/>

返回值为

<link href="foo.css"

解析是一种方法:

$x = file_get_contents("foo.txt");
$xml = simplexml_load_string("<links>$x</links>");
$results = array();

foreach ($xml->link as $link)
    $results[] = (string)$link['href'];
$x=文件获取内容(“foo.txt”);
$xml=simplexml_load_字符串($x”);
$results=array();
foreach($xml->linkas$link)
$results[]=(字符串)$link['href'];

查看它的工作情况:

通常的方法不是这样做,而是使用
SimpleDOM
或类似的东西。我从只包含这些元素的文件中读取。谢谢。--还有,SimpleDOM/etc--非常慢,用于完整HTML页面的DOM处理,而不是用于文件解析。至于实际的否决理由:,您没有显示在解决这个问题上付出了很大的努力。@Fabriciomatté-无论是否有标题,都会对最好的问题进行否决投票,因为它是匿名的。感谢您为否决投票辩护。虽然正则表达式不适合解析HTML,但它适合解析HTML段(例如,如果上述内容是文件的唯一内容,则DOM解析将无法工作,因为没有DOM)。此外,使用DOM解析器时,假定已安装并启用了DOM解析器。DOM解析也很慢,并且仅适用于“呈现的”"内容。@Fabriciomatté-通过呈现内容,我的意思是,页面被呈现到DOM中,生成的页面可能与源页面本身不同。当处理在线页面时,DOM当然是一个更好的解决方案——大多数情况下都是如此。非常好的响应。您缺少指导跨多个页面递归搜索的参数字符串,但结束标记在该行终止搜索时存在例外情况。
]*href=“([^”]*)"
是我使用的,但是它假设href包含在引号中。close,但是您的正则表达式将href中的字符限制为a-z、1-9和/。不完全是这样,/I为您提供了大小写不敏感,可以通过使用char,它应该捕获所有ascii可能性中的大部分。我注意到了内联搜索参数,您是正确的,我应该说明“A-Z,A-Z,1-9,/和”。:)有趣的解决方案+1创意:)。这对像和这样的内联评论块有效吗?@SanuelJackson不知道,试着让我知道:-)是的。现在我们来看看它是否跳过了其他东西。当内容中混合了其他内容时,它就会中断。我没有尝试使用纯文本或/**/键入块注释。这仍然是一个非常酷的方法——有点像作弊,如果你知道文件中没有其他内容的话。
$x = file_get_contents("foo.txt");
$xml = simplexml_load_string("<links>$x</links>");
$results = array();

foreach ($xml->link as $link)
    $results[] = (string)$link['href'];