让正则表达式匹配一次

时间:2014-11-21 09:08:28

标签: regex match getattribute

我想得到第一个src属性,我正在使用这个正则表达式,但它抓取所有src属性:

(?<=src=").*?(?=")

示例:

<img src="http://ia.media-imdb.com/images/M/MV5BMTY3NjY0MTQ0Nl5BMl5BanBnXkFtZTcwMzQ2MTc0Mw@@._V1_SY317_CR0,0,214,317_AL_.jpg" />
<img src="http://ia.media-imdb.com/images/M/MV5BMjAzODk4OTI3Ml5BMl5BanBnXkFtZTgwMzU2MTY0MzE@._V1_SX86_CR0,0,86,86_AL_.jpg" />
<img src="http://ia.media-imdb.com/images/M/MV5BNzUzNzY1NzQxM15BMl5BanBnXkFtZTgwMTM0MTY0MzE@._V1_SY86_CR33,0,86,86_AL_.jpg" />
<img src="http://ia.media-imdb.com/images/M/MV5BMTAxNTAwMTg0ODReQTJeQWpwZ15BbWU4MDMzNDE2NDMx._V1_SY86_CR33,0,86,86_AL_.jpg" />

3 个答案:

答案 0 :(得分:1)

您可以通过两种方式获取第一个img src属性的值。

  1. 通过capturing group

    (?s)^(?:(?!<img\b[^<>]*?\bsrc=).)*<img\b[^<>]*?\bsrc="([^"]*)"
    
  2. 从组索引1中获取img src属性的值。

    DEMO

    1. 通过\Kpositive lookahead assertion

      (?s)^(?:(?!<img\b[^<>]*?\bsrc=).)*<img\b[^<>]*?\bsrc="\K[^"]*(?=")
      
    2. 从组索引0中获取img src属性的值。

      DEMO

答案 1 :(得分:0)

^((?!\bsrc\b).)*src="([^"]+)

试试这个。抓住捕获。参见演示。

http://regex101.com/r/xN4qL9/3

答案 2 :(得分:0)

试试这个:

  $re = "/src=[\"'](?<src>[^<>\"']+)['\"]/";
    $str = "<img src=\"http://ia.media-imdb.com/images/M/MV5BMTY3NjY0MTQ0Nl5BMl5BanBnXkFtZTcwMzQ2MTc0Mw@@._V1_SY317_CR0,0,214,317_AL_.jpg\" />\n<img src=\"http://ia.media-imdb.com/images/M/MV5BMjAzODk4OTI3Ml5BMl5BanBnXkFtZTgwMzU2MTY0MzE@._V1_SX86_CR0,0,86,86_AL_.jpg\" />\n<img src=\"http://ia.media-imdb.com/images/M/MV5BNzUzNzY1NzQxM15BMl5BanBnXkFtZTgwMTM0MTY0MzE@._V1_SY86_CR33,0,86,86_AL_.jpg\" />\n<img src=\"http://ia.media-imdb.com/images/M/MV5BMTAxNTAwMTg0ODReQTJeQWpwZ15BbWU4MDMzNDE2NDMx._V1_SY86_CR33,0,86,86_AL_.jpg\" />";

    preg_match($re, $str, $matches);
    var_dump( $matches['src']);

<强>输出:

string 'http://ia.media-imdb.com/images/M/MV5BMTY3NjY0MTQ0Nl5BMl5BanBnXkFtZTcwMzQ2MTc0Mw@@._V1_SY317_CR0,0,214,317_AL_.jpg' (length=114)

live demo