Как извлечь подмножество из строки специальных символов, используя Perl - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужно получить подмножество строки, начиная с определенного начального слова и заканчивая перед указанным словом.Сохранить в строковой переменной.

Пример: 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 ]

1 голос
/ 12 апреля 2019

Следующий код извлекает часть между $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'
} 
0 голосов
/ 13 апреля 2019

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

perl -ne '/((?<=pre-wrap">)|(?<=>)(?=test))\S+(?=\/camp)/  ; print $&' d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...