我有以下内容(作为示例):
[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)
)。