带有选项的Perl Regexp
我试图解析这个字符串以及/TN和end forward/之间的数字。此外,如果有一个/REF,我也需要抓取REF。所以这可能是一种非此即彼的情况 示例字符串:带有选项的Perl Regexp,regex,perl,Regex,Perl,我试图解析这个字符串以及/TN和end forward/之间的数字。此外,如果有一个/REF,我也需要抓取REF。所以这可能是一种非此即彼的情况 示例字符串: my $acis_string = 'EL41X/TN 333-3333 /DES TAT 313 223-2388 OE508-1-12-13/ORD R1244850301 /CD 02-03-15 /ZKMA 8001 T1ZF PNTCMINEDC0 PNTCMISOH00/SCS DQKUX /TN 333-3330, 6540
my $acis_string = 'EL41X/TN 333-3333 /DES TAT 313 223-2388 OE508-1-12-13/ORD R1244850301 /CD 02-03-15 /ZKMA 8001 T1ZF PNTCMINEDC0 PNTCMISOH00/SCS DQKUX /TN 333-3330, 6540/RTI 581 /LSO 248 340/REF 28/TGP 581 /ORD C1244888657/CD 02-12-16';
他是我的基础regexp:
push @matches, [$2, $1] while $acis_string =~ /\/TN (.*?)\/.*?(\/REF (\w+)\/)?/g;
期望输出:
$VAR1 = [
[
n/a,
'333-3333 '
],
[
28,
'333-3330, 6540'
]
];
注:
字符串中可能有许多/TN/和/REF
谢谢,
Kevin您可以使用以下正则表达式:
\/TN\s+([^\/]+)(?:(?!\/TN|\/REF).)*(?:\/REF\s+([^\/]+))?
看
说明:
:在\/TN\s+([^\/]+)
之后匹配除/TN
以外的字符,并放入捕获组1/
:匹配字符的逻辑,确保字符中没有(?:(?!\/TN |\/REF)。*
或/TN
/REF
:可以选择在(?:\/REF\s+([^\/]+)?
之后匹配除/REF
以外的字符,并将其放入捕获组2中/
\/(TN[^\/]+)\/(REF[^\/]+)
解释
转义\/
/
捕获(TN[^\/]+)
,然后是非TN
/
或您的其他选项|
/TN
作为记录分隔符,并使用文件处理程序读取字符串:
my @res;
{
my $ref;
local $/='/TN ';
open my $fh, '<', \$acis_string;
<$fh>;
while(<$fh>) {
$ref = m#/REF ([^/]*[^/\s])# ? $1 : 'n/a';
push @res, [$ref, m#^([^/]*[^/\s])#];
}
close $fh;
}
my@res;
{
我的$ref;
本地$/='/TN';
打开我的$fh,'欢迎来到Stack Overflow。我不明白你在问什么。你的问题中没有问题。请用它来澄清你想知道什么,或者什么不起作用。