eval下直接可以执行。。
如果是JS的话。。不过相信PHP也可以的。。毕竟语法类似嘛。。
<script type="text/javascript">
alert(eval('([q1,[q2,q3,q4],p,{o,{d}},m,n])'));
</script>
如果是JS的话。。不过相信PHP也可以的。。毕竟语法类似嘛。。
<script type="text/javascript">
alert(eval('([q1,[q2,q3,q4],p,{o,{d}},m,n])'));
</script>
解决方案 »
- php 双层循环控制
- 如何实现“提交并打印”的功能?
- 如何截取文件名?
- 不同系统不同数据库数据一致
- 1亿条数据,如何快速的从一张表导入到另一张表
- 请教关于php5配置的问题
- gd库显示中文问题
- php中相当于asp中date().time().now()的函数分别是什么?举三个例子,OK?
- apache2.2 配置php 各种该有的配置都有 死活加载不了gd,mysql,mbstring模块
- Parse error: syntax error, unexpected '<' in ..\syclasstype.php on line 91,怎么解决
- 股票系统不适合用模版?
- 关于smarty的问题
$s = "q1,[q2,q3,q4],p,{o,{d}},m,n";
echo preg_replace("/(,\s*\[|\]\s*)/mi","◇",$s);
[]部分可以完全替换,然后用explode可以分开一部分了。但是{}的判断,不太成功,呵呵。
string str = "'[q1,[q2,q3,q4],p,{o,{d}},m,n]'";
string pattern = @"(?<='[\{\[]|,)(\{.*?\}|\[.*?\]|.*?)(?=[\},\]]'|,)";
MatchCollection mc = Regex.Matches(str, pattern);
foreach (Match m in mc)
{
Console.WriteLine(m.Value);
}-------
输出:
q1
[q2,q3,q4]
p
{o,{d}}
m
n我不懂PHP,不知道PHP是否支持反向正声明
$m = array();
$str = '[q1,[q2,q3,q4],p,{o,{d}},m,n]';//字符串
preg_match('/(?!=[\{\[]|,)(\{.*\}|\[.*\]|.*)(?=[\},\]]|,)/s', $str, $m);
foreach($m as $out) {
echo $out.'<br/>';
}
?>
照0009(夏天以南) 的正则改了下,
输出的是
[q1,[q2,q3,q4]
[q1,[q2,q3,q4]当然 js 是可以直接eval的说,但是要的是php的。小弟愚笨,没有好好学过php,
foreach($m[2] as $out) {
echo $out.'<br/>';
}
改成这样就出错
$str = '[q1,[q2,q3,q4],p,{o,{d}},m,n}]';//字符串
preg_match_all('/(?<=[\{\[]|,)(\{.*?\}|\[.*?\]|.*?)(?=[\}\]]|,)/', $str, $matches);
for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: ".$matches[0][$i]."<br/>";
}
?>
又改了,
结果如下
matched: q1
matched: [q2,q3,q4]
matched: p
matched: {o,{d}
matched: m
matched: n少了一个大括号。还有,可以解释一下,写的正则的意思吗?
php里不是支持json么?
用解json的方法解下不就行了么?
preg_match_all('/(?<=[\{\[]|,)(\{.*?\}|\[.*?\]|.*?)(?=[\}\]]{2}|,)/', $str, $matches);
for ($i=0; $i< count($matches[0]); $i++)
echo "matched: ".$matches[0][$i]."<br/>";修改了一下,可以了
如果我把字符串改成$str = '[q1,[q2,q3,q4],p,{o,{d},j},m,n}]';//字符串
则输出的结果为matched: q1
matched: [q2,q3,q4]
matched: p
matched: {o,{d}
matched: j}
matched: m
matched: n
另外,小弟搞这个就是当json用
php要5.20以上才支持。另外用一个网上的竟然出来的乱码,索性自己简单的写个用用。
不想遇到如此问题,
这个正则分为三个部分一 (?<=^[\{\[]|,)
这是一个反向正声明,只做声明不做匹配.(正因为使用了反向正声明和正声明,才能够得到多个匹配结果),这个声明是指在匹配内容的前面必须是以{或[符号开头(匹配第一个元素),或者是逗号(匹配中间的元素).二 (\{.*?\}|\[.*?\]|.*?) 实际上只要写成 (\{.*\}|\[.*\]|.*?) 就行
这是匹配主体,规定了匹配三种模式.{.*}或者[.*]或者.*?三 (?=[\}\]]$|,)
这是一个正声明,指明了匹配内容的后面必须是]或者}结尾(匹配最后一个元素),或者是一个逗号(匹配中间元素)
这个正则有些牵强说
如果我把字符串改成$str = '[q1,[q2,q3,q4],p,{o,{d},j},m,n}]';//字符串
则输出的结果为
----------------汗...我不知道你给的这个字符串是做什么用的,所以没考虑到这样的情况,对这个例子用那个修改过的正则也是不行,我再看看
你给的这个
[q1,[q2,q3,q4],p,{o,{d},j},m,n}]
本身就是不配对的
少了一个{
matched: q1
matched: [q2,q3,q4]
matched: p
matched: {o,{d}
matched: j}
matched: m
matched: n
不好意思,测试的时候多加了一个},
呵呵,
正则倒是看懂了些,
另外这个好像有嵌套的问题,
我网上找找资料
--------------------什么嵌套问题?
用正则
(?<=^[\{\[]|,)(\{.*\}|\[.*\]|.*?)(?=[\}\]]$|,)
匹配
[q1,[q2,q3,q4],p,{o,{d},j},m,n]
得到结果为
q1
[q2,q3,q4]
p
{o,{d},j}
m
n是不是你想要的?
//echo substr('TechOnTheNet', 1, -1);
//var $p = 'hejunbin';
//echo $p{1};
$str = '[q1,[q2,q3,q4],p,{o,{d},j},m,n]';//字符串
preg_match_all('/(?<=^[\{\[]|,)((\{([^\{\}]|(?R))*\})|(\[([^\[\]]|(?R))*\])|.*?)(?=[\}\]]|,)/', $str, $matches);
for ($i=0; $i< count($matches[0]); $i++)
echo "matched: ".$matches[0][$i]."<br/>";
?>
输出如下:matched: q1
matched: [q2,q3,q4]
matched: p
matched: {o,{d},j}
matched: m
matched: n哈哈,这回问题解决了,
参考如下有的正则表达式引擎,专门针对这种嵌套提供了支持。并且在栈空间允许的情况下,能够支持任意未知层次的嵌套:比如 Perl,PHP,GRETA 等。在 PHP 和 GRETA 中,表达式中使用 "(?R)" 来表示嵌套部分。匹配嵌套了未知层次的 "小括号对" 的表达式写法如下:"\( ([^()] | (?R))* \)"。
不过用(?<=^[\{\[]|,)(\{.*\}|\[.*\]|.*?)(?=[\}\]]$|,)
也能够达到你所需的结果
O.o
O.o
---------------------
实际上这个正则也是不通用的 -_-比如[q1,[q2,q3,q4],p,{o,{d},j},m,{x,y},n]
还是用你那个?R吧...