[问题] 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