我在Perl中编写脚本,需要从文本文件中提取一些信息。

这就是我的代码的样子-字符串值组成但代表所有可能的字符串变体。

my @alpha = ("abcdefgh(i) jklmno(pqrs3), uvwxyz",
             "abcdefghi jklmn(opq1st), uvwxyz",
             "abcdefghi jklmn(o_q(1s3)), uvwxyz",
             "abcdef(gh)i jklmno(pq(1s3)), uvwxyz");

foreach my $line (@alpha){
    if ($line =~ /\((.*\(?.*\)?)\),/){
    print $1
    }
}

我正在尝试捕获最后一组括号之间的大文本(或对于说英语的美国人使用方括号)。
请注意,由于我要匹配任何内容,文本,数字或其他特殊字符,因此我使用“点”运算符。

本质上我想打印出:
pqrs3
opq1st
o_q(1s3)
pq(1s3)

但我不断得到:
 (i) jklmno(pqrs3) <-- not ok
 opq1st <-- this is ok
 opq(1s3) <-- this is also ok
 gh)i jklmno(pq(1s3) <-- not ok

我究竟做错了什么?甚至有可能以这种方式进行匹配?
任何帮助表示赞赏。

最佳答案

(\((?:[^()]|(?1))*\))(?!.*\()

您可以在此处使用recursive正则表达式。请参阅演示。

https://regex101.com/r/hE4jH0/21

10-08 05:10