作者liyih ()
看板Perl
标题Re: [问题] 请教一个关於正规表示式的问题
时间Mon Dec 20 16:12:40 2010
※ 引述《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
1F:→ kornelius:推 12/30 13:43