作者shomingchang ( )
看板RegExp
标题[问题] 括号匹配的问题..
时间Wed May 12 23:31:17 2010
我要辨识的样式是 (运算式)^数字,(运算式)^(运算式),数字^(运算式),数字^数字 这样
抱歉没说清楚状况...
(Math.sqrt((124+20)))+
(Math.sqrt(169)
)^2
要怎样下 RegExp 才能让辨识出来的是
(Math.sqrt(169))^2
而不是
(Math.sqrt((124+20)))+(Math.sqrt(169)
)^2
也就是说我想找最小成对的括号
我做sqrt的时候发现他预设似乎会从最长的符合样式开始找
但是这次我想要从最小的开始找
感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.179.238
※ 编辑: shomingchang 来自: 118.160.179.238 (05/12 23:45)
1F:推 bibo9901:\(.+?\) 这样? 05/13 00:06
2F:→ shomingchang:不行 他还是选到最前面的括号 05/13 00:29
3F:推 No:如果是匹配括号,那後面怎麽还会有^2呢? 05/13 00:35
※ 编辑: shomingchang 来自: 118.160.179.238 (05/13 00:40)
4F:→ shomingchang:有方法可以找出所有匹配样式的字串吗? 05/13 00:48
5F:→ CindyLinz:「最小」是里面没有其他括号的意思吗? 那 /\([^()]*\)/g 05/13 00:51
6F:推 LPH66:楼上看来也不对 他要的东西里面有 Math.sqrt(169) 05/13 00:52
7F:推 No:那这样说起来,要的结果,也不算是"最小"的成对括号耶 05/13 01:22
8F:→ evernever:PHP: $s="(Math.sqrt((124+20)))+(Math.sqrt(169))^2"; 05/13 15:29
9F:→ evernever:preg_match_all('#(\([^()]*(?1)?[^()]*\))#',$s,$m); 05/13 15:29
10F:→ evernever:print_r($m); 05/13 15:29