
刚接触正则,想实现一个类似 UBB 的“简码”功能,不知道思路对不对。
直接贴代码吧
function shortcode_parse($text) { $atts = array(); $pattern = '/([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*\'([^\']*)\'(?:\s|$)|([\w-]+)\s*=\s*([^\s\'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|(\S+)(?:\s|$)/' if ( preg_match_all($pattern, $text, $match, PREG_SET_ORDER) ) { foreach ($match as $value ) { if (!empty($value [1])) $atts[strtolower($value [1])] = $value [2]; elseif (!empty($value [3])) $atts[strtolower($value [3])] = $value [4]; elseif (!empty($value [5])) $atts[strtolower($value [5])] = $value [6]; elseif (isset($value [7]) && strlen($value [7])) $atts[] = $value [7]; elseif (isset($value [8])) $atts[] = $value [8]; } } return $atts; } $atts = '[test id1="xxx" id2="xxx" id3="xxx" id4="xxx"]'; $attx = shortcode_parse($atts); print_r($attx); 现在实现出来是这样的:
Array ( [0] => [test [id1] => xxx [id2] => xxx [id3] => xxx [1] => id4="xxx"] ) 希望实现下面这样的效果:
Array ( [0] => [ [1] => test [id1] => xxx [id2] => xxx [id3] => xxx [id4] => xxx [2] => ] ) 希望各位 dalao 可以为小弟解惑,谢谢。
好像没说清楚,就是我想把下面这段“简码”用正则替换成数组。
上面的代码已经简单实现了,可是并没有达到我需要的效果
简码:
[test id1="xxx" id2="xxx" id3="xxx" id4="xxx"] 数组:
Array ( [0] => [ [1] => test [id1] => xxx [id2] => xxx [id3] => xxx [id4] => xxx [2] => ] ) 1 stormouse 2016-07-20 20:33:46 +08:00 额…能稍微说的再清楚一点吗,下面那个效果是什么意思= = |
4 kair 2016-07-22 15:01:12 +08:00 (\[)(\w*) id\d=\"(.*)\"(\]) 是不是这种效果? |