[問題] 括號匹配的問題..

看板RegExp (正規表示式 Regular Expression)作者 ( )時間15年前 (2010/05/12 23:31), 編輯推噓4(406)
留言10則, 6人參與, 最新討論串1/1
我要辨識的樣式是 (運算式)^數字,(運算式)^(運算式),數字^(運算式),數字^數字 這樣 抱歉沒說清楚狀況... (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)

05/13 00:06, , 1F
\(.+?\) 這樣?
05/13 00:06, 1F

05/13 00:29, , 2F
不行 他還是選到最前面的括號
05/13 00:29, 2F

05/13 00:35, , 3F
如果是匹配括號,那後面怎麼還會有^2呢?
05/13 00:35, 3F
※ 編輯: shomingchang 來自: 118.160.179.238 (05/13 00:40)

05/13 00:48, , 4F
有方法可以找出所有匹配樣式的字串嗎?
05/13 00:48, 4F

05/13 00:51, , 5F
「最小」是裡面沒有其他括號的意思嗎? 那 /\([^()]*\)/g
05/13 00:51, 5F

05/13 00:52, , 6F
樓上看來也不對 他要的東西裡面有 Math.sqrt(169)
05/13 00:52, 6F

05/13 01:22, , 7F
那這樣說起來,要的結果,也不算是"最小"的成對括號耶
05/13 01:22, 7F

05/13 15:29, , 8F
PHP: $s="(Math.sqrt((124+20)))+(Math.sqrt(169))^2";
05/13 15:29, 8F

05/13 15:29, , 9F
preg_match_all('#(\([^()]*(?1)?[^()]*\))#',$s,$m);
05/13 15:29, 9F

05/13 15:29, , 10F
print_r($m);
05/13 15:29, 10F
文章代碼(AID): #1Bwid8m9 (RegExp)
文章代碼(AID): #1Bwid8m9 (RegExp)