regexp获取第二个匹配项

时间:2016-02-03 09:29:41

标签: php regex

我有以下内容(例如):

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

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

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

但是,现在我还需要完全第二个id ,不幸的是我无法为此构建regexp。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我在评论中描述的方式:

$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 demo。正则表达式将[gallery +除[]以外的一个或多个字符与ids="的整个单词\[gallery[^][]+\bids="进行匹配,然后将其捕获到第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 demo

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

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