我有以下内容(例如):
[gallery ids="1955,1947,1951,1945,1953,1949"]
我必须在ids数组中找到第一个ID 。我可以使用以下正则表达式执行此操作:
$pattern = '~\[gallery.+ids="\K([^,]*)~';
但是,现在我还需要完全第二个id ,不幸的是我无法为此构建regexp。
答案 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)
)