我正在使用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
}
}
我试图捕捉最后一组括号之间的大文本(或英国英语使用者的括号) 请注意我正在使用" dot"运算符,因为我想匹配任何内容,文本,数字或其他特殊字符。
基本上我想打印出来:
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
我做错了什么?或者甚至可以这样匹配?
任何帮助表示赞赏。
答案 0 :(得分:2)
答案 1 :(得分:2)
以下是给定字符串的方法:
use warnings;
use strict;
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 =~ m/.*\s+\w+\((.*)\),\s+\w+/ )
{
print $1, "\n";
}
}
输出:
pqrs3
opq1st
o_q(1s3)
pq(1s3)