看板 Perl 關於我們 聯絡資訊
※ 引述《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