作者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
→ AutumnVic:有~thanks!!因為之前沒弄清楚.*跟.*?的使用情況 做完這 12/20 09:47
→ AutumnVic:個case就懂了!! 謝謝~ 12/20 09:47