2016-02-03 201 views
1

我有以下内容(作为例子):正则表达式以获得第二匹配项

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

我必须找到在ids数组第一ID。我能做到这一点使用下面的正则表达式:

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

不过,现在我还需要得到完全第二ID,unfourtunately我不能够构建正则表达式这一点。

+1

是不是更容易抓住整个'ids'的价值,并爆炸它来访问ID?使用''〜\ [gallery [^] [] + \ bids =“([^”] *)〜'',然后展开$ matches [1]'。 –

回答

1

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

$pattern = '~\[gallery.+ids="\K(\d*),(\d*)~'; 
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][1]使用$ids[0][0]第一ID和第二。

随着图案,则匹配一个或多个位(前具有可选的逗号),其前面有\[gallery[^][]+\bids="(参见上面的说明)或先前成功匹配的端部(与(?!^)\G))。

+0

如果我的回答对你有帮助,请考虑接受答案是否适用于你,并加倍努力。 –