我有以下内容(作为例子):正则表达式以获得第二匹配项
[gallery ids="1955,1947,1951,1945,1953,1949"]
我必须找到在ids数组第一ID。我能做到这一点使用下面的正则表达式:
$pattern = '~\[gallery.+ids="\K([^,]*)~';
不过,现在我还需要得到完全第二ID,unfourtunately我不能够构建正则表达式这一点。
我有以下内容(作为例子):正则表达式以获得第二匹配项
[gallery ids="1955,1947,1951,1945,1953,1949"]
我必须找到在ids数组第一ID。我能做到这一点使用下面的正则表达式:
$pattern = '~\[gallery.+ids="\K([^,]*)~';
不过,现在我还需要得到完全第二ID,unfourtunately我不能够构建正则表达式这一点。
这种模式将返回第一个和第二个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 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]);
然后,您可以通过访问$ids[0][1]
使用$ids[0][0]
第一ID和第二。
随着图案,则匹配一个或多个位(前具有可选的逗号),其前面有\[gallery[^][]+\bids="
(参见上面的说明)或先前成功匹配的端部(与(?!^)\G)
)。
如果我的回答对你有帮助,请考虑接受答案是否适用于你,并加倍努力。 –
是不是更容易抓住整个'ids'的价值,并爆炸它来访问ID?使用''〜\ [gallery [^] [] + \ bids =“([^”] *)〜'',然后展开$ matches [1]'。 –