Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将内容与preg\u match\u all匹配_Php - Fatal编程技术网

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 TitleItem2 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”