Php 将内容与preg\u match\u all匹配
我想将以下Php 将内容与preg\u match\u all匹配,php,Php,我想将以下$content中的标题文本放入一个数组中。因此,我尝试使用preg\u match\u 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="It
$content
中的标题文本放入一个数组中。因此,我尝试使用preg\u match\u 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添加
g
标志:
preg_match_all( '/sc-item title=\"([^\']+)\"/ig', $content, $matches, PREG_OFFSET_CAPTURE );
试试这个模式
preg_match_all( '/sc-item title="(.*?)"/i', $content, $matches, PREG_OFFSET_CAPTURE );
??意味着不贪婪;或者使用修饰语
preg_match_all( '/sc-item title="([^\']+)"/iU', $content, $matches, PREG_OFFSET_CAPTURE );
结果是一样的
顺便说一句,我认为双引号转义是不必要的。你现在得到了什么?你可以只回显
$matches[1]
而不是vardump
,因为$metches[1]
是一个字符串。它也选择了部分内容。我尝试了Kazeko的答案,这似乎奏效了。谢谢你的回答,我还没试过。你知道上面的问题是什么吗?谢谢,它是有效的,你知道我的表达式有什么问题吗?因为正则表达式在默认情况下是“贪婪的”——它将尽可能多地匹配。因此,在您的模式中,它匹配到最后一个双引号(即“Item2 Title”之后的双引号)。要使匹配的非贪婪,请使用“?”或修饰符“U”