作者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