RegEx for preg_match_all无法正常工作

时间:2013-05-09 11:53:02

标签: php regex preg-match-all

这是我的字符串($string):

    swatch: 'http://abc.com/aa.jpg',
    zoom:[
      'http://abc.com/bb.jpg'
    ],
    large:[

      'http://abc.com/cc.jpg'
    ],

我在PHP文件中使用以下模式,并希望匹配http://abc.com/bb.jpg

preg_match_all('/(?<=zoom:\[\s{15}\').*(?=\')/', $string, $image);

但没有任何回报。我该怎么办?

1 个答案:

答案 0 :(得分:1)

为了简单起见,我们不会使用环顾四周,虽然我说我们需要s修饰符,但我错了它只用于匹配我们赢得的点.的新行我在这里使用,所以\s匹配一个新行:

$string = <<<JSO
        swatch: 'http://abc.com/aa.jpg',
        zoom:[
          'http://abc.com/bb.jpg'
        ],
        large:[

          'http://abc.com/cc.jpg'
        ],
JSO;
preg_match_all('/zoom:\[\s*\'(?<img>[^\']*)\'\s*\]/', $string, $m);
print_r($m['img']);

<强>输出:

Array
(
    [0] => http://abc.com/bb.jpg
)

<强>解释

/ # Starting delimiter
    zoom:\[ # Matches zoom:[
    \s* # Matches spaces, newlines, tabs 0 or more times
    \'  # Matches '
    (?<img>[^\']*) # named group, matches everything until ' found
    \'  # Matches '
    \s* # Matches spaces, newlines, tabs 0 or more times
    \]  # Matches ]
/ # Ending delimiter