作者ericabab (ㄍㄠˊ)
看板Perl
标题Fw: [问题] perl的non-greedy紧接( )?
时间Thu May 19 23:16:26 2016
各位版大好,我想判断有没有连续的 /*,
来判断是否有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://webptt.com/cn.aspx?n=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
1F:推 flu: 如果你把後面那堆non-greedy的用()围起来——也就是$2—— 05/20 01:21
2F:→ flu: 你会发现东西都在里面 05/20 01:21
3F:推 flu: 前两群pattern —— 1个是 .*? 另一个是 (\*\/)? ——都match 05/20 01:31
4F:→ flu: 0个时,让第三群pattern全包剩下的字元的状况下「竟然」ok了 05/20 01:33
5F:→ flu: 结果就是看到的那样 05/20 01:38
6F:→ ericabab: 可是第二组pat没有用non-greedy,为何抢不赢第三组呢? 05/20 08:13
7F:推 CindyLinz: 第一组先抢短.. 0 个字, 此时第二组必须不取才能继续 05/20 16:30