作者abliou (把青春freeze)
看板Perl
标题Re: [问题] 请教一个关於正规表示式的问题
时间Sat Dec 18 11:27:44 2010
※ 引述《AutumnVic (小点点雨伞儿)》之铭言:
: 我现在要做的事
: 是要从很多像这样的字串中
: ((((((.(((.((((..((((...........))))..)))))..........))...))))))...
: ........(((((..(((((((..(((.....)))))..))......)))))..)))...
: 挑出中间部份 "(.....)"的左括和右括分别位在字串中的第几个字元
: 下面是我的CODE
: my $haha="....((((((...(((..((.(.(((((.....))))).))...)))))))...)))..";
: print length($1) if( $haha =~ m/(.*)[^\(]*? /)
: 但他这样取到的一直都是整个字串的length
我是不明白这样的一个写法 到底根据是什麽 不过会回传整个字串应该蛮合理的
首先这边的(.*)以greedy特性就会把整个字串都包进去
後面的[^\(]如果是表达"非左括号的字符集" 那把整个字串包进去就合理了
最後一个表达是讲不贪多出现零次以上 感觉 有点看不太懂
: 而不是我想要的"中间左括"的位子
: 能不能请厉害的人帮我一下 实在不知道该怎麽拆解找这两个东西 @@
因为问题好像有点复杂 所以照字面上去解 就先假设一行中只会出现一个"中间括号"
那要算的就是"出现在最右边的左括号"
这样写不知道有没有达到需求
use 5.010 ;
my $haha='....((((((...(((..((.(.(((((.....))))).))...)))))))...)))..';
say length($haha) ;
say length($1) if( $haha =~ m/(.*)\(.*?/) ;
--
如果青春注定要向前跑
他妈的...那我的出口在那?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.137.138.159
1F:→ AutumnVic:有~thanks!!因为之前没弄清楚.*跟.*?的使用情况 做完这 12/20 09:47
2F:→ AutumnVic:个case就懂了!! 谢谢~ 12/20 09:47