Php 请指定正确的正则表达式
我希望使用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
$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文档。请参见