【发布时间】:2014-05-29 14:45:24
【问题描述】:
此脚本在文本 (online test) 中识别“BBCode”(带有参数和值):
<?php
preg_match_all(
'#\[(link)(.*?)!?\](.*?)\[\/\\1\]#i',
'[link href="http://www.google.com" title="Google" target="_blank"]Google[/link]
[link href="http://www.facebook.com"]Facebook[/link]
[link href=\'http://www.twitter.com\' rel="nofollow"]Twitter[/link]',
$StrMatches
);
/* $StrMatches[0] = Full tag string
* $StrMatches[1] = Tag name
* $StrMatches[2] = tag params string
* $StrMatches[3] = Tag content
* */
print_r($StrMatches);
$ParamList = array();
foreach ($StrMatches[2] as $TagParamStr )
{
preg_match_all('#\s*([^=]+)=[\'|"]([^\'|"]*)[\'|"]#', $TagParamStr, $ParamMatches);
array_push($ParamList, $ParamMatches);
}
/* $ParamList[0] = Full param string
* $ParamList[1] = Param name
* $ParamList[2] = Param value
* */
print_r($ParamList);
输出:
Array
(
[0] => Array
(
[0] => [link href="http://www.google.com" title="Google" target="_blank"]Google[/link]
[3] => [link href="http://www.facebook.com"]Facebook[/link]
[2] => [link href='http://www.twitter.com' rel="nofollow"]Twitter[/link]
)
[1] => Array
(
[0] => link
[1] => link
[2] => link
)
[2] => Array
(
[0] => href="http://www.google.com" title="Google" target="_blank"
[1] => href="http://www.facebook.com"
[2] => href='http://www.twitter.com' rel="nofollow"
)
[3] => Array
(
[0] => Google
[1] => Facebook
[2] => Twitter
)
)
Array
(
[0] => Array
(
[0] => Array
(
[0] => href="http://www.google.com"
[1] => title="Google"
[2] => target="_blank"
)
[1] => Array
(
[0] => href
[1] => title
[2] => target
)
[2] => Array
(
[0] => http://www.google.com
[1] => Google
[2] => _blank
)
)
[1] => Array
(
[0] => Array
(
[0] => href="http://www.facebook.com"
)
[1] => Array
(
[0] => href
)
[2] => Array
(
[0] => http://www.facebook.com
)
)
[2] => Array
(
[0] => Array
(
[0] => href='http://www.twitter.com'
[1] => rel="nofollow"
)
[1] => Array
(
[0] => href
[1] => rel
)
[2] => Array
(
[0] => http://www.twitter.com
[1] => nofollow
)
)
)
代码运行良好!但我想用一个正则表达式来优化它。
我怎样才能使它成为一个独特的正则表达式?
对不起我的英语不好:(
【问题讨论】: