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

作者: ericabab (ㄍㄠˊ)   2016-05-19 23:16:26
各位版大好,我想判斷有沒有連續的 /*,
來判斷是否有nested的多行註解
ex1: $str='/* blah /* ' 表示有nested
ex2: $str='/* blah */ blah /* ' 表示沒有nested
假設用ex2的$str
我用
/\/\*.*?(\*\/)?.*?\/\*/
第1個跟第3個?是non-greedy,第2個?是存在與否
然後判斷$1是否存在,不知為何會抓不到$1?
如果第二個?不寫就抓得到,可是這樣無法達成我的需求
或是有更好的解法可以相授,謝謝!
作者: flu (Crazy Rhythm)   2016-05-20 01:21:00
如果你把後面那堆non-greedy的用()圍起來——也就是$2——你會發現東西都在裡面前兩群pattern —— 1個是 .*? 另一個是 (\*\/)? ——都match0個時,讓第三群pattern全包剩下的字元的狀況下「竟然」ok了結果就是看到的那樣
作者: ericabab (ㄍㄠˊ)   2016-05-20 08:13:00
可是第二組pat沒有用non-greedy,為何搶不贏第三組呢?
作者: CindyLinz (Cindy Wang)   2016-05-20 16:30:00
第一組先搶短.. 0 個字, 此時第二組必須不取才能繼續

Links booklink

Contact Us: admin [ a t ] ucptt.com