匹配内容与preg_match_all

时间:2013-11-08 08:13:15

标签: php

我想将以下$content中的标题文本放入数组中。所以我正在尝试使用preg_match_all,但是我在表达式中犯了一些错误,因为它没有正确选择标题。

$content = '[sc-item title="Item1 Title"] Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum scelerisque posuere euismod. P [/sc-item][sc-item title="Item2 Title"] Lorem [/sc-item]';

$titles = array();
preg_match_all( '/sc-item title=\"([^\']+)\"/i', $content, $matches, PREG_OFFSET_CAPTURE );

if( isset($matches[1]) ){ 
    //$titles = $matches[1]; 
    var_dump($matches[1]);  
}

在上面的例子中,我希望得到文字 Item1 Title Item2 Title

2 个答案:

答案 0 :(得分:1)

添加g标志:

preg_match_all( '/sc-item title=\"([^\']+)\"/ig', $content, $matches, PREG_OFFSET_CAPTURE );

答案 1 :(得分:1)

尝试这种模式

preg_match_all( '/sc-item title="(.*?)"/i', $content, $matches, PREG_OFFSET_CAPTURE );

?意思是不贪心;或使用修饰符

preg_match_all( '/sc-item title="([^\']+)"/iU', $content, $matches, PREG_OFFSET_CAPTURE );

它有相同的结果。

顺便说一句,我认为双引号逃脱是不必要的。