我需要获取字符串的子集,该字符串的子集从特定的起始词开始,在指定的词之前结束。存储在字符串变量中。
示例: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
答案 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