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 请指定正确的正则表达式_Php_Regex - Fatal编程技术网

Php 请指定正确的正则表达式

Php 请指定正确的正则表达式,php,regex,Php,Regex,我希望使用Php检索和之间的数据。请任何人指定一个正确的正则表达式,以便检索给定表标记之间的数据。我相信您需要的是正则表达式而不是正则表达式。我相信您需要的是正则表达式。这取决于您需要什么你正在找回。我自己也不是PHP专业人士,但我会这样做: <?php $contents = file_get_contents($_SERVER['PHP_SELF']); $array = explode("<table width=\"100%\" border=\"0\" ce

我希望使用Php检索
之间的数据。请任何人指定一个正确的正则表达式,以便检索给定表标记之间的数据。

我相信您需要的是正则表达式而不是正则表达式。

我相信您需要的是正则表达式。

这取决于您需要什么你正在找回。我自己也不是PHP专业人士,但我会这样做:

<?php
    $contents = file_get_contents($_SERVER['PHP_SELF']);
    $array = explode("<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#EBEBEB\">", $contents);
    $newarray = explode("</table>", $array[1]);
    $yourdata = $newarray[0];
?>


如果您不介意将剩余的原始HTML放在那里,那么应该使用此方法。否则,其他人可能会有更好的解决方案。

这取决于您检索的内容。我自己也不是PHP专业人士,但我会这样做:

<?php
    $contents = file_get_contents($_SERVER['PHP_SELF']);
    $array = explode("<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#EBEBEB\">", $contents);
    $newarray = explode("</table>", $array[1]);
    $yourdata = $newarray[0];
?>


如果您不介意将剩余的原始HTML放在那里,那么应该使用此方法。否则,其他人可能会有更好的解决方案。

虽然正则表达式适用于各种任务,但我发现在解析HTML DOM时,它通常会有缺陷。HTML的问题是,文档的结构非常多变,很难准确地(准确地说,我指的是100%的成功率,没有误报)提取标记

我建议您使用DOM解析器,例如,并将其用作:

function get_first_image($html){
    $dom = phpQuery::newDocument($html);

    $first_img = $dom->find('img:first');

    if($first_img !== null) {
        return $first_img->attr('src');
    }

    return null;
}
有些人可能认为这是一种过分的做法,但最终,它将更易于维护,并允许更多的可扩展性。例如,使用DOM解析器,我还可以获得alt属性

可以设计一个正则表达式来实现相同的目标,但其限制方式是,它将强制
alt
属性位于
src
之后或相反的位置,并且克服此限制将增加正则表达式的复杂性

也可以考虑以下几点。要正确匹配

属性(在组2中捕获),需要以下正则表达式:

<\s*?img\s+[^>]*?\s*src\s*=\s*(["'])((\\?+.)*?)\1[^>]*?>
]*?\s*src\s*=\s*([“'))((\\?+)*?)\1[^>]*?>
同样,如果出现以下情况,上述操作可能会失败:

  • 属性或标记名称为大写,并且未使用
    i
    修饰符
  • src
    属性周围不使用引号
  • 然后,另一个属性
    src
    在其值的某处使用
    字符
  • 还有一些我没有预见到的原因

所以再次强调,不要使用正则表达式来解析dom文档。

虽然正则表达式可以用于大量任务,但我发现在解析HTML dom时,它通常存在不足。HTML的问题是,文档的结构非常多变,很难准确地进行解析(准确地说,我指的是100%的成功率,没有假阳性)提取标签

我建议您使用DOM解析器,例如,并将其用作:

function get_first_image($html){
    $dom = phpQuery::newDocument($html);

    $first_img = $dom->find('img:first');

    if($first_img !== null) {
        return $first_img->attr('src');
    }

    return null;
}
有些人可能会认为这太过分了,但最终,它将更易于维护,并允许更多的可扩展性

可以设计一个正则表达式来实现相同的目标,但其限制方式是,它将强制
alt
属性位于
src
之后或相反的位置,并且克服此限制将增加正则表达式的复杂性

也要考虑以下内容:要正确匹配<代码>属性(在第2组中捕获),需要以下正则表达式:

<\s*?img\s+[^>]*?\s*src\s*=\s*(["'])((\\?+.)*?)\1[^>]*?>
]*?\s*src\s*=\s*([“'))((\\?+)*?)\1[^>]*?>
同样,如果出现以下情况,上述操作可能会失败:

  • 属性或标记名称为大写,并且未使用
    i
    修饰符
  • src
    属性周围不使用引号
  • 然后,另一个属性
    src
    在其值的某处使用
    字符
  • 还有一些我没有预见到的原因
同样,不要使用正则表达式来解析dom文档。

请参见