问题分数300分 一个思考很久的正则,还是没有实现! 有难度

中国蓝计划 2004-09-25 02:39:39
用正则把下面的 111[] 中的内容提取出来

第一个提取出来的(速度运行快的),300分 全归他!!!




111[
222[ ]

333[

]


444[

]a[

]


555[

666[ ]
777[
]
888[]

]
]
...全文
196 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yellowhwb 2004-09-27
  • 打赏
  • 举报
回复
如果你无限嵌套的话是不可能写正则表达式来的,你要知道最多嵌套几层iMax,然后
var strReg='';
for(var i=0;i<iMax;i++)
{
strReg='(\S{1,3}\[('+strReg+')\])*';
}

strReg='/^('+strReg+')+$/';
fason 2004-09-27
  • 打赏
  • 举报
回复
just try, not tested before
<textarea id="test">
111[
222[ ]

333[

]


444[

]a[

]


555[

666[ ]
777[
]
888[]

]
]
111[
222[ ]

333[

]


444[

]a[

]


555[

666[ ]
777[
]
888[]

]
]
</textarea>
<script>
function g(s){
var arr=[],i=0;
var re = /111\[([\s\S]*?)\]/
while (re.test(s)) {
arr[i++] = RegExp.$1;
s = s.replace(re, "");
}
return arr;
}
document.write(g(test.value).join("<br/>");
</script>
</script>
中国蓝计划 2004-09-27
  • 打赏
  • 举报
回复
to yellowhwb(KaDoO)

想了很久,可能单正则解决不了!
yellowhwb 2004-09-27
  • 打赏
  • 举报
回复
to redsleaf:
因为按你的要求,写出来应该是这样:/^(\S{1,3}\[((\S{1,3}\[\])*)*\])+$/但这样根本就不是一个正则表单式!!!!
cybernaute 2004-09-27
  • 打赏
  • 举报
回复
<script language="JavaScript">
<!--
function g(s) {
var arr=[], i=0;
var re = /111\[([\s\S]*)\]/;
while (re.test(s)) {
arr[i++] = RegExp.$1;
s = s.replace(re, "");
}
return arr;
}
document.write(g(test.value));
//-->
</script>
把fason的re改成无?号,测试通过。
中国蓝计划 2004-09-27
  • 打赏
  • 举报
回复
怎么能知道?
中国蓝计划 2004-09-26
  • 打赏
  • 举报
回复
在顶
中国蓝计划 2004-09-26
  • 打赏
  • 举报
回复
不是
starwu 2004-09-26
  • 打赏
  • 举报
回复
是不是想取得第一个[ 和 最后一个 ] 之间的内容?
ouyld 2004-09-25
  • 打赏
  • 举报
回复
wocsdn 2004-09-25
  • 打赏
  • 举报
回复
up
中国蓝计划 2004-09-25
  • 打赏
  • 举报
回复
up
中国蓝计划 2004-09-25
  • 打赏
  • 举报
回复
测试了substr(str,strpos(str,"["),strpos(str,"]"))

如果又很多个 就不管用啦!
klend 2004-09-25
  • 打赏
  • 举报
回复
没测试,没用正则
substr(str,strpos(str,"["),strpos(str,"]"))
中国蓝计划 2004-09-25
  • 打赏
  • 举报
回复
因为又多个

111[
222[ ]

333[

]


444[

]a[

]


555[

666[ ]
777[
]
888[]

]
]




ccc[
222[ ]

333[

]


444[

]a[

]


555[

666[ ]
777[
]
888[]

]
]
中国蓝计划 2004-09-25
  • 打赏
  • 举报
回复
怎么写啊!偶现在已经晕啦!!
mjpclab 2004-09-25
  • 打赏
  • 举报
回复
没别的内容,而且结构嵌套是完整的,可以用贪婪匹配模式啊
mrshelly 2004-09-25
  • 打赏
  • 举报
回复
为什么用正则???


<?
$str=<<<EOT
111[
222[ ]

333[

]


444[

]a[

]


555[

666[ ]
777[
]
888[]

]
]
EOT;
echo substr($str,strpos($str,"[")+1,strrpos($str,"]")-strpos($str,"[")-1);
?>
中国蓝计划 2004-09-25
  • 打赏
  • 举报
回复
分析每个结构中的内容

比如
555[

666[ ]
777[
]
888[]

]
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2004-09-25 02:39
社区公告
暂无公告