Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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 使用href提取rel_Php_Regex_Expression - Fatal编程技术网

Php 使用href提取rel

Php 使用href提取rel,php,regex,expression,Php,Regex,Expression,以下正则表达式从带有“preg\u match\u all”的页面中提取所有HREF: /\s+href\s*=\s*[\"\']?([^\s\"\']+)[\"\'\s]+/ims 如果“a”标记中有一个“rel”属性,我想将其与结果一起返回。如何修改顶部的代码以包含“rel”属性(如果存在) 更新: 以下是: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt

以下正则表达式从带有“preg\u match\u all”的页面中提取所有HREF:

/\s+href\s*=\s*[\"\']?([^\s\"\']+)[\"\'\s]+/ims
如果“a”标记中有一个“rel”属性,我想将其与结果一起返回。如何修改顶部的代码以包含“rel”属性(如果存在)

更新: 以下是:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do 
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut 
enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi 
ut aliquip ex ea commodo consequat. <a href="http://example.com" rel="nofollow">Duis</a>
nirure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
我希望它能返回:

Array
(
    [0] => Array
        (
            [0] =>  href="http://example.com" rel="nofollow"
        )

    [1] => Array
        (
            [0] => http://example.com
        )

)
您可以使用它。如果有,它将给出
rel

见演示


可以选择使用以下方法捕获它:

结果如下:

Array
(
    [0] => Array
        (
            [0] => http://example.com
            [1] => nofollow
        )

    [1] => Array
        (
            [0] => http://example2.com
            [1] => nofollow
        )

)


正如其他人提到的,regex不是解析html的最佳工具。取决于您将要实现的目标和输入的外观/如果它是您的输入,并且知道预期的结果。

输入和预期的输出是什么举个例子:)您还可以使用HTML解析器
DOMDocument
等替代方法更新问题!您的正则表达式不会返回以下返回:未知修饰符'['@ThomasdeRoo当然,它只是正则表达式,请参见eval中的更新和示例。in@ThomasdeRoo什么是逃脱?
\s+href\s*=\s*[\"\']?(([^\s\"\']+)[\"\'\s]+rel="[^"]*")|\s+href\s*=\s*[\"\']?([^\s\"\']+)[\"\'\s]+
$regex = '~<a\b(?=(?>[^>]*rel\s*=\s*["\']([^"\']+))?)[^>]*href=\s*["\']\s*\K[^"\']+~';
preg_match_all($regex, $str, $out, PREG_SET_ORDER);
print_r($out);
Array
(
    [0] => Array
        (
            [0] => http://example.com
            [1] => nofollow
        )

    [1] => Array
        (
            [0] => http://example2.com
            [1] => nofollow
        )

)