Re: [問題] 請教一個關於正規表示式的問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 6 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章