如何使用perl从特殊字符串中提取子集

时间:2019-04-12 13:22:11

标签: perl

我需要获取字符串的子集,该字符串的子集从特定的起始词开始,在指定的词之前结束。存储在字符串变量中。

示例:pre-wrap">test-for??maths/camp

我需要获取子集。

预期输出:test-for??maths

pre-wrap">之后,或者可能以test开头

及之前:/camp

我不知道如何在Perl中实现这一目标。

这是我尝试的代码。输出未达到预期效果:

#!/usr/bin/perl

use warnings;
use strict;

my $string = 'pre-wrap">test-for??maths/camp';
my $quoted_substring = quotemeta($string);
my ($quoted_substring1) = split('/camp*', $quoted_substring);
my (undef, $substring2) = split('>\s*', $quoted_substring1);

print $string, "\n";
print $substring2, "\n";

输出:

$ perl test.pl
pre-wrap">test-for??maths/camp
test\-for\?\?maths\         # but why this \ is coming

2 个答案:

答案 0 :(得分:1)

以下代码提取$before$after之间的部分(可能包含正则表达式元字符,它们在\Q...\E表达式内被视为纯字符):

my $string = 'pre-wrap">test-for??maths/camp';

my $before = 'pre-wrap">';
my $after  = '/camp';

if ($string =~ /\Q$before\E(.*?)\Q$after\E/) {
  print $1;  # prints 'test-for??maths'
} 

答案 1 :(得分:0)

pre-wrap">test-for??maths/camp位于'd',

perl -ne '/((?<=pre-wrap">)|(?<=>)(?=test))\S+(?=\/camp)/  ; print $&' d