我在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