PHP从正则表达式获取数组

时间:2013-12-03 19:01:06

标签: php regex

我有像

这样的字符串
$content = "Some content some content
[images ids="10,11,20,30,40"]
Some content";

我想从中移除[images ids="10,11,20,30,40"]部分,并将ids部分视为php array(10,11,20,30,40)

正则表达式有可能吗?

2 个答案:

答案 0 :(得分:6)

您可以使用:

$txt = <<<LOD
Some content some content
[images ids="10,11,20,30,40"]
Some content
LOD;

$result = array();

$txt = preg_replace_callback('~(?:\[images ids="|\G(?<!^))([0-9]+)(?:,|"])~',
    function ($m) use (&$result) { $result[] = $m[1]; }, $txt);

echo $txt . '<br>' . print_r($result, true);

\G锚在这种情况下非常有用,因为它是一种锚,意思是“在字符串的开头或与先前的匹配”相邻。

但是,模式中没有任何内容检查是否有最后一个数字后跟"]。如果需要这样做,则必须为模式添加前瞻:

~(?:\[images ids="|\G(?<!^))([0-9]+)(?=(?:,[0-9]+)*"])(?:,|"])~

答案 1 :(得分:2)

假设这是内容的结构并且它没有变得更复杂,那么:

preg_match_all('/(\d+)/', $content, $matches);
print_r($matches[0]);

如果它更复杂,则需要添加更多内容以缩小范围。