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

看板Perl作者時間14年前 (2010/12/20 16:12), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串6/6 (看更多)
※ 引述《gugod (啊)》之銘言: : ※ 引述《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 不足以處理遞迴結構的字串解析。 : 用已經寫好的模組比較正確。 補充一下 5.10 以後有些差異: http://perldoc.perl.org/perlfaq6.html #Can-I-use-Perl-regular-expressions-to-match-balanced-text? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.64.130

12/30 13:43, , 1F
12/30 13:43, 1F
文章代碼(AID): #1D3m_vK_ (Perl)
文章代碼(AID): #1D3m_vK_ (Perl)