如何preg_match下面一段「shortcode」,以便視頻和對齊是數組鍵,並且它們的值是引號中的內容? [視頻=「123456」 align =「left」 /]preg_match創建一個包含語義數組鍵的數組的簡短代碼
1
A
回答
1
$string='[video="123456" align="left"/]';
$string= preg_replace("/\/|\[|\]/","",$string);
$s = explode(" ",$string);
foreach ($s as $item){
list($tag, $value) = explode("=",$item);
$array[$tag]=$value;
}
print_r($array);
-1
我不認爲有任何(簡單)的方式使用單一的正則表達式來做到這一點,但是這將在一個相當普遍的工作方式,挑選出標籤和解析它們:
$s = 'abc[video="123456" align="left"/]abc[audio="123456" volume="50%"/]abc';
preg_match_all('~\[([^\[\]]+)/\]~is', $s, $bracketed);
$bracketed = $bracketed[1];
$tags = array();
foreach ($bracketed as $values) {
preg_match_all('~(\w+)\s*=\s*"([^"]+)"~is', $values, $pairs);
$dict = array();
for ($i = 0; $i < count($pairs[0]); $i++) {
$dict[$pairs[1][$i]] = $pairs[2][$i];
}
array_push($tags, $dict);
}
//-----------------
echo '<pre>';
print_r($tags);
echo '</pre>';
輸出:
Array
(
[0] => Array
(
[video] => 123456
[align] => left
)
[1] => Array
(
[audio] => 123456
[volume] => 50%
)
)
1
這裏使用另一種方法:輸出的$arr
$str = '[video="123456" align="left"/][video="123457" align="right"/]';
preg_match_all('~\[video="(\d+?)" align="(.+?)"/\]~', $str, $matches);
$arr = array_combine($matches[1], $matches[2]);
print_r()
:
Array
(
[123456] => left
[123457] => right
)
0
與命名參數替代的解決方案:
$str = '[video="123456" align="left"/][video="123457" align="right"/]';
$matches = array();
preg_match_all('/\[video="(?P<video>\d+?)"\salign="(?P<align>\w+?)"\/\]/', $str, $matches);
for ($i = 0; $i < count($matches[0]); ++ $i)
print "Video: ".$matches['video'][$i]." Align: ".$matches['align'][$i]."\n";
您也重新使用以前的array_combine小號Alix提供的解決方案:
print_r(array_combine($matches['video'], $matches['align']));
相關問題
- 1. 如何創建一個包含每個鍵的數組的NSDictionary?
- 2. 如何創建一個包含其他值的數組數組?
- 3. 根據數組是否包含一個短語來分隔數組
- 4. 從字典數組中,使數組包含一個鍵的值
- 5. 創建一個簡單的數組
- 6. 我該如何創建一個包含帶密碼的外鍵的組合鍵?
- 7. php數組鍵包含一個詞
- 8. 創建一個包含字符和增加數字的數組
- 9. 創建包含丟失鍵的分組
- 10. 在Ruby on Rails中創建一個包含多個值的簡單數組
- 11. 基於另一個數組的值創建包含等級的數組?
- 12. 創建包含結構值的數組
- 13. 創建新的數組包含對象
- 14. 組合號碼創建一個數組
- 15. 如何創建一個包含2個數組的字典?
- 16. 創建一個包含多個數組的表格PHP
- 17. 如何創建一個包含N個零的數組?
- 18. 如何從JavaScript數組中創建一個簡單的數組?
- 19. 從數組中創建一個新的數組與preg_match返回的條件
- 20. 創建一個只包含給定類的對象的數組
- 21. 創建一個包含一個矩形和一個整數的數組
- 22. PHP的preg_match創建空數組
- 23. 如何創建一個包含大型數組的結構數組?
- 24. 包含鍵和關聯數組的數組,如何創建關係
- 25. 獲取數組的一個關鍵是另一個數組中,幷包含值
- 26. 使用原型來創建一個包含方法的數組
- 27. 創建一個包含數組的散列
- 28. 創建一個包含對象數組的類
- 29. 在包含對象值的對象中創建一個數組
- 30. 如何創建一個包含元素值的數組?
我是PHP的新手,我試圖讓自己變得更好,這只是讓我的夜晚。非常感謝ghostdog74! – 2010-02-02 04:13:41
如果這解決了您的問題,您應該通過單擊問題旁邊的複選標記來給予答案,以便對答案感興趣的其他人可以找到對您有用的內容。 – 2010-02-03 21:54:29