刚接触正则,想实现一个类似 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=\"(.*)\"(\])
是不是这种效果? |