正则表达式获取第二个匹配项


regexp to get second matching item

我有以下内容(作为示例):

[gallery ids="1955,1947,1951,1945,1953,1949"]

我必须在 ids 数组中找到第一个 id。我可以使用以下正则表达式来执行此操作:

 $pattern = '~'[gallery.+ids="'K([^,]*)~';   

但是,现在我还需要获得正好第二个 id,不幸的是,我无法为此构建正则表达式。

此模式将返回第一个和第二个 id:

$pattern = '~'[gallery.+ids="'K('d*),('d*)~';

我在评论中描述的方式:

$s = '[gallery ids="1955,1947,1951,1945,1953,1949"]';
preg_match_all('~'[gallery[^][]+'bids="([^"]+)~', $s, $ids);
$ids_arr = explode(",", $ids[1][0]);
print_r($ids_arr);

请参阅 IDEONE 演示。正则表达式匹配 [gallery + 除 [ 以外的一个或多个字符,并]最多一个带有 '[gallery[^][]+'bids=" 的整个单词ids=",然后将双引号内的所有子字符串捕获到组中 1。

使用此代码,通过 $ids_arr[0] 访问第一个 ID,使用 $ids_arr[1] 访问第二个 ID。

以下是使用一个正则表达式操作获取所有 ID 的一种方法:

$s = '[gallery ids="1955,1947,1951,1945,1953,1949"]';
preg_match_all('~(?:'[gallery[^][]+'bids="|(?!^)'G),?'K'd+~', $s, $ids);
print_r($ids[0]);

查看 IDEONE 演示

然后,您可以使用$ids[0][0]访问第一个ID,并通过$ids[0][1]访问第二个ID。

使用该模式,您可以匹配一个或多个数字(前面有一个可选的逗号),这些数字前面有 '[gallery[^][]+'bids="(请参阅上面的说明)或上一个成功匹配的结尾(带有 (?!^)'G))。