代码之家  ›  专栏  ›  技术社区  ›  Joe

php regex:获取src值

  •  2
  • Joe  · 技术社区  · 15 年前

    如何在php中使用regex检索所有src值?

    <script type="text/javascript" src="http://localhost/assets/javascript/system.js" charset="UTF-8"></script>
    <script type='text/javascript' src='http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c' charset='UTF-8'></script>
    

    检索到的值应仅包含:

    谢谢您。

    5 回复  |  直到 15 年前
        1
  •  7
  •   Scott Evernden    15 年前
    /src=(["'])(.*?)\1/
    

    <?php
    
    $input_string = '<script type="text/javascript" src="http://localhost/assets/javascript/system.js" charset="UTF-8"></script>';
    $count = preg_match('/src=(["\'])(.*?)\1/', $input_string, $match);
    if ($count === FALSE) 
        echo('not found\n');
    else 
        echo($match[2] . "\n");
    
    $input_string = "<script type='text/javascript' src='http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c' charset='UTF-8'></script>";
    $count = preg_match('/src=(["\'])(.*?)\1/', $input_string, $match);
    if ($count === FALSE) 
        echo('not found\n');
    else 
        echo($match[2] . "\n");
    

    给予:

    http://localhost/assets/javascript/system.js
    http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c
    
        2
  •  7
  •   Nick Presta    15 年前

    也许只有我一个人,但我不喜欢用正则表达式在HTML中查找内容,尤其是当HTML不可预测时(可能来自用户或其他网页)。

    $doc =
    <<<DOC
        <script type="text/javascript" src="http://localhost/assets/javascript/system.js" charset="UTF-8"></script>
        <script type='text/javascript' src='http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c' charset='UTF-8'></script>
    
    DOC;
    
    $dom = new DomDocument;
    $dom->loadHTML( $doc );
    
    $elems = $dom->getElementsByTagName('*');
    
    foreach ( $elems as $elm ) {
        if ( $elm->hasAttribute('src') )
            $srcs[] = $elm->getAttribute('src');
    }
    
    print_r( $srcs );
    

    我不知道这个和正则表达式之间的速度差异是什么,但是读它和理解我要做的事情要少很多时间。

        3
  •  4
  •   alexn    15 年前

    我同意Nick,使用DomDocument对象获取数据。以下是xpath版本:

    $doc =
    <<<DOC
        <script type="text/javascript" src="http://localhost/assets/javascript/system.js" charset="UTF-8"></script>
        <script type='text/javascript' src='http://localhost/index.php?uid=93db46d877df1af2a360fa2b04aabb3c' charset='UTF-8'></script>
    DOC;
    
    $doc = new DomDocument;
    $doc->loadHTML($doc);
    
    $xpath = new DomXpath($doc);
    $elements = $xpath->query('//[@src]');
    
    foreach($elements as $element)
    {
        echo $element->nodeValue;
    }
    
        4
  •  0
  •   KOGI    15 年前

    如果您决定使用regex路径,这应该对您有用

    /(?<=\<).*?src=(['"])(.*?)\1.*?(?=/?\>)/si
    
        5
  •  0
  •   ceed    10 年前

    var Scripts = [];
    $('head script').each(function(){
        if($(this).attr('type') == 'text/javascript' && $(this).attr('src')){
            Scripts.push($(this).attr('src'));
        }
    });
    console.log(Scripts)