正则匹配问题-【已解决】

正则匹配问题-【已解决】

数据如下

[Copy to clipboard] [ - ]
CODE:
while(<DATA>){
    s///g;
    print;
}
__END__
* [[2006年]] - [[愛知県]][[岡崎市]]と旧[[額田町]]が[[日本の市町村の配置分合|合併]]し(新)[[岡崎市]]が[[誕生]]する。
* [[2007年]] - [[ブルガリア]]と[[ルーマニア]]が[[欧州連合|EU]]に加盟。
* [[2009年]] - [[閏秒]]。08:59:59と09:00:00の間に08:59:60が挿入される予定

想得到以下结果

[Copy to clipboard] [ - ]
CODE:
例如  [[日本の市町村の配置分合|合併]]  =>  [[合併]]
       [[欧州連合|EU]]  => [[EU]]

不好意思  没说清楚

我把原数据贴上了

很简单呀。
s/1+\|(2+)/$1/g


QUOTE:
原帖由 hitsubunnu 于 2008-11-25 18:20 发表
数据如下


while(){
    s///g;
    print;
}
__END__
* [[333]] - [[aaaa]aaaaaaaaa[[111|222]]aaaaa[[aaa]]aaaaaaaaaaa
* [[aa]] - [[1111]aaaa[[111|222]]aaaaaaaaaa
[[1111|22222]]
* [[111|22 ...

1项中都是1?有没有别的字符,比如\|, \[, \]之类的?
对不起我没说清楚

111  和   222  代表任意字符


QUOTE:
原帖由 ynchnluiti 于 2008-11-25 18:38 发表

1项中都是1?有没有别的字符,比如\|, \[, \]之类的?

1项  有可能是字母 或者 数字  不包含任何符号


QUOTE:
原帖由 hitsubunnu 于 2008-11-25 18:44 发表


1项  有可能是字母 或者 数字  不包含任何符号

没有这样的吧:[[\[\|abc\\|2222222222]]aaaaaaaaa[[1111111|22222]]aaaaaaaaaa

只包含字母、数字可以用\w


QUOTE:
原帖由 ynchnluiti 于 2008-11-25 18:53 发表

没有这样的吧:[[\[\|abc\\|2222222222]]aaaaaaaaa[[1111111|22222]]aaaaaaaaaa

只包含字母、数字可以用\w

我把原数据贴上了


QUOTE:
原帖由 hitsubunnu 于 2008-11-25 19:30 发表


我把原数据贴上了



[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w

while (<DATA>) {
    s/[^\[\|]*\|//g;
    print;
}
__END__
* [[2006年]] - [[愛知県]][[岡崎市]]と旧[[額田町]]が[[日本の市町村の配置分合|合併]]し(新)[[岡崎市]]が[[誕生]]する。
* [[2007年]] - [[ブルガリア]]と[[ルーマニア]]が[[欧州連合|EU]]に加盟。
* [[2009年]] - [[閏秒]]。08:59:59と09:00:00の間に08:59:60が挿入される予定

print "[[$&]] => [[$1]]\n" if /[^[]+\|([^]]+)/;

谢谢 楼上两位   

自己把自己转糊涂了