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

看板Perl作者 (啊)時間13年前 (2010/12/18 00:21), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串4/6 (看更多)
※ 引述《AutumnVic (小點點雨傘兒)》之銘言: : 我現在要做的事 : 是要從很多像這樣的字串中 : ((((((.(((.((((..((((...........))))..)))))..........))...))))))... : ........(((((..(((((((..(((.....)))))..))......)))))..)))... : 挑出中間部份 "(.....)"的左括和右括分別位在字串中的第幾個字元 : 下面是我的CODE : my $haha="....((((((...(((..((.(.(((((.....))))).))...)))))))...))).."; : print length($1) if( $haha =~ m/(.*)[^\(]*? /) : 但他這樣取到的一直都是整個字串的length : 而不是我想要的"中間左括"的位子 : 能不能請厲害的人幫我一下 實在不知道該怎麼拆解找這兩個東西 @@ 不是很確定所謂的「中間部份」指的是什麼狀況... 也許要再更仔細定義一些。 以下用 $position 表示所要的結果。 如果已經知道要找的字串是什麼,例如說 "(abcde)",那用 index: $position = index $haha, "(abcde)"; 如果要找的是「在碰到第一個 ")" 的最後一個 "("」,大約是這樣的 regex: $haha =~ /(^.+[^)]+?)(\([^(]+?\))/s; $position = length $1; 如果括號如範例,不會有交錯出現,同一層也不會有多組,那 這解法也會「找到最內層的那一組小括號」。 一層有多組括號指的是像這樣: "....((((.)(...)....(...))(..))..." -1-==2== --3-- 同一層內有三組括號。 如果最終的目的是要正確的解析括號對應關係,其不要用 regex,直接用 Text::Balanced 模式,regex 不足以處理遞迴結構的字串解析。 用已經寫好的模組比較正確。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.222.155

12/18 11:13, , 1F
推一下
12/18 11:13, 1F

12/20 09:45, , 2F
我有事先處理所以都只有一組括號~謝謝你的說明 =)
12/20 09:45, 2F
文章代碼(AID): #1D2uuA7o (Perl)
討論串 (同標題文章)
文章代碼(AID): #1D2uuA7o (Perl)