[問題] perl的non-greedy緊接( )?

看板Perl作者 (ㄍㄠˊ)時間8年前 (2016/05/19 23:16), 8年前編輯推噓3(304)
留言7則, 3人參與, 最新討論串1/1
各位版大好,我想判斷有沒有連續的 /*, 來判斷是否有nested的多行註解 ex1: $str='/* blah /* ' 表示有nested ex2: $str='/* blah */ blah /* ' 表示沒有nested 假設用ex2的$str 我用 /\/\*.*?(\*\/)?.*?\/\*/ 第1個跟第3個?是non-greedy,第2個?是存在與否 然後判斷$1是否存在,不知為何會抓不到$1? 如果第二個?不寫就抓得到,可是這樣無法達成我的需求 或是有更好的解法可以相授,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.238.187 ※ 文章網址: https://www.ptt.cc/bbs/RegExp/M.1463664369.A.00A.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: ericabab (119.14.238.187), 05/19/2016 23:16:26 ※ 編輯: ericabab (119.14.238.187), 05/19/2016 23:16:51

05/20 01:21, , 1F
如果你把後面那堆non-greedy的用()圍起來——也就是$2——
05/20 01:21, 1F

05/20 01:21, , 2F
你會發現東西都在裡面
05/20 01:21, 2F

05/20 01:31, , 3F
前兩群pattern —— 1個是 .*? 另一個是 (\*\/)? ——都match
05/20 01:31, 3F

05/20 01:33, , 4F
0個時,讓第三群pattern全包剩下的字元的狀況下「竟然」ok了
05/20 01:33, 4F

05/20 01:38, , 5F
結果就是看到的那樣
05/20 01:38, 5F

05/20 08:13, , 6F
可是第二組pat沒有用non-greedy,為何搶不贏第三組呢?
05/20 08:13, 6F

05/20 16:30, , 7F
第一組先搶短.. 0 個字, 此時第二組必須不取才能繼續
05/20 16:30, 7F
文章代碼(AID): #1NFTZBrS (Perl)
文章代碼(AID): #1NFTZBrS (Perl)