Re: [問題] 請教一個關於正規表示式的問題

看板Perl作者 (把青春freeze)時間14年前 (2010/12/18 11:27), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串5/6 (看更多)
※ 引述《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

12/20 09:47, , 1F
有~thanks!!因為之前沒弄清楚.*跟.*?的使用情況 做完這
12/20 09:47, 1F

12/20 09:47, , 2F
個case就懂了!! 謝謝~
12/20 09:47, 2F
文章代碼(AID): #1D32ep21 (Perl)
文章代碼(AID): #1D32ep21 (Perl)