Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 呼应<;a>;有class=";pret";来自html文档_Php_Regex - Fatal编程技术网

Php 呼应<;a>;有class=";pret";来自html文档

Php 呼应<;a>;有class=";pret";来自html文档,php,regex,Php,Regex,我有一个php$content格式的html文档。我可以回显它,但我只需要所有的 我尝试了更多来自www的示例,但我要么得到空数组,要么得到php错误 一个regex示例为我提供了一个空数组(表中有标记) 各种错误的原因:未验证的html、非utf 8字符 接下来,我在另一个网站上做了这项工作,匹配了单个SQL表中的内容,结果是复制了一个网站,其中包含来自我国的更新数据。我将不再在www上搜索匹配的单个结果。希望您尝试解析有效(至少足够有效)的HTML文档,您应该使用: // Simple ex

我有一个php
$content
格式的html文档。我可以回显它,但我只需要所有的

我尝试了更多来自www的示例,但我要么得到空数组,要么得到php错误

一个regex示例为我提供了一个空数组(表中有
标记)

各种错误的原因:未验证的html、非utf 8字符


接下来,我在另一个网站上做了这项工作,匹配了单个SQL表中的内容,结果是复制了一个网站,其中包含来自我国的更新数据。我将不再在www上搜索匹配的单个结果。

希望您尝试解析有效(至少足够有效)的HTML文档,您应该使用:

// Simple example from php manual from comments
$xml = new DOMDocument(); 
$xml->loadHTMLFile($url); 
$links = array(); 

foreach($xml->getElementsByTagName('a') as $link) { 
    $links[] = array('url' => $link->getAttribute('href'),
                     'text' => $link->nodeValue); 
} 
注意使用not(它只是对错误更具鲁棒性)。您还可以设置(正如hakre在注释中所建议的),以便解析器尝试从错误中恢复

或者您可以使用():

对于无效HTML的情况,您可以像这样使用regexp:

$a1='\s*[^\'”=]+\s*=\s*“[^”]*';#具有“-空间容差”的属性
$a2=“\s*[^'\”=]+\s*=\s*'[^']*'”;#具有“-空间容差”的属性
$a3='\s*[^\'“=]+\s*=\s*[\w\d]*'#未转换的值-允许空间
#[^'”=]*#垃圾-我不会将此插入regexp,但您可能必须这样做
$a=“(?:$a1 |$a2 |$a2)*”;#任意数量的参数
$class='class=([\'”])pret\\1';#Using?:仔细使用对\\1的工作至关重要
#否则,您可以使用[“']

$reg=“(.*?)获得了如下链接

preg_match_all('/<a[^>]*class="pret">(.*?)<\\/a>/si', $content, $links);
print_r($links[0]);
preg_match_all('/...)

因此,我需要获取
href
中的第一个数字以及
span

之间的数字,为什么不使用dom解析器而不是一个复杂的regexp?您的(任意)regexp将来很可能会崩溃。您应该使用来完成它。我确实尝试过dom,但导致了错误,因此我认为我使用regex得到的空数组更接近结果,我们可以问一下您得到了什么错误吗?500内部服务器错误尝试了类似的操作,相同的错误消息,因此可能是文档不是有效的HTML……。painafter使用w3验证,很抱歉!无法检查此文档。非utf 8字符…因此,删除非utf 8字符可能会有所帮助?如果没有非utf 8字符,html 5验证程序会说托盘结束标记头。;看到正文开始标记,但相同类型的元素已打开。。在上次错误后无法恢复。任何进一步的错误都将被忽略。-还有e错误可以被抑制,只需在这个网站上搜索现有的问答。我们已经涵盖了所有这些案例。
// Simple example from php manual from comments
$xml = new DOMDocument(); 
$xml->loadHTMLFile($url); 
$links = array(); 

foreach($xml->getElementsByTagName('a') as $link) { 
    $links[] = array('url' => $link->getAttribute('href'),
                     'text' => $link->nodeValue); 
} 
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//a[@class='pret']");

if (!is_null($elements)) {
    foreach ($elements as $element) {
        $links[] = array('url' => $link->getAttribute('href'),
                         'text' => $link->nodeValue); 
    }
}
preg_match_all('/<a[^>]*class="pret">(.*?)<\\/a>/si', $content, $links);
print_r($links[0]);
Array(
[0] => <a href='/word_word_34670_word_number.htm' class="pret"><span>3340.3570 word</span></a>..........)