0

我有一个字符串:

[gallery ids="2282,2301,2302,2304,2283,2303,2285,459,1263,469,471,1262,1261,472,608,467,607,606,466,460"]

ids有所不同,但我如何(在 PHP 中)获取值?

正则表达式不是我的强项,但我想我们可以检查直接在单词后面的引号内的所有内容ids

4

3 回答 3

5

正则表达式:preg_match_all(/\d+/,$string,$matches);

在这里解释演示:http ://regex101.com/r/fE4fE6

于 2013-03-04T23:51:08.697 回答
2

我认为一个更简单的解决方案,而不是使用preg_match,是简单地explode将字符串"用作分隔符,其中 ids 将是第二个元素(索引1)。

$string = '[gallery ids="2282,2301,2302,2304,2283,2303,2285,459,1263,469,471,1262,1261,472,608,467,607,606,466,460"]';

$array = explode('"', $string);

$ids = explode(',', $array[1]);

这在 PHP 5.4 中可以非常优雅,其中添加了函数数组取消引用:

$string = '[gallery ids="2282,2301,2302,2304,2283,2303,2285,459,1263,469,471,1262,1261,472,608,467,607,606,466,460"]';

$ids = explode(',', explode('"', $string)[1]);

这样做的好处preg_match是,值是什么并不重要——它们可以是数字、字母或其他符号。

于 2013-03-04T23:59:04.693 回答
0

如果你想要一个非正则表达式的解决方案,你可以这样做:

$str = ...;

$start = strpos($str, '"') + 1; // find opening quotation mark
$end = strpos($str, '"', $start); // find closing   ''     ''

$ids = explode(",", substr($str, $start, $end - $start));
于 2013-03-04T23:54:17.450 回答