мне нужно найти дополнение этого:в Perl, как найти подстроку, которая не соответствует шаблону
$_ = 'aaaaabaaabaaabacaaaa';
while(/([a][a][a][a])/gc){
next if pos()%4 != 0;
my $b_pos = (pos()/4)-1;
print " aaaa at :$b_pos\n";
}
То есть, набор из 4-х caracters, что не является «аааа».
Ниже не работает
$_ = 'aaaaabaaabaaabacaaaa';
while(/([^a][^a][^a][^a])/gc){
my $b_pos = (pos()/4)-1;
print "not a at :$b_pos\n";
}
Конечно, я могу это сделать
$_ = 'aaaaabaaabaaabacaaaa';
while(/(....)/gc){
next if $1 eq 'aaaa';
my $b_pos = (pos()/4)-1;
print "$1 a at :$b_pos\n";
}
не более прямой путь?
Чтобы уточнить ожидаемый результат, мне нужно найти все 4-х буквенные сюиты, которые не являются «аааа», а также там.
1-й код выхода
aaaa at :0
aaaa at :4
второй код должен вывести
not aaaa at :1
not aaaa at :2
not aaaa at :3
третий выходной код, это то, что я ищу
abaa at :1
abaa at :2
abac at :3
Я понимаю, что не было достаточно ясным , пожалуйста, примите мои извинения.
То, что я пытаюсь добиться, это как деление строки на группы из 4 букв, получение значения и позиции групп, которые не соответствуют шаблону.
Мой третий код дает мне ожидаемый результат. В это время он читает строку 4 буквы и обрабатывает те, которые не являются «aaaa».
Я также узнал, что, несмотря на все ваши предложения, мой первый код не работает должным образом, он должен пропустить, если pos()% 4! = 0, что будет означать, что шаблон охватывает две группы из 4 Я исправил код.
Вопреки всем ожиданиям, от меня и других, следующих ничего не Ouput на всех
/[^a]{4}/
я, вероятно, следует придерживаться с моим 3-кодом.
B tw, '[a] [a] [a] [a]' можно записать как 'aaaa' – Amarghosh
Согласен, это для ясности – kaklon
Я не понимаю, что вы подразумеваете под pos()/4-1 ... Разве вы не имеете в виду pos() - 4 ??! А что такое обратное? Вы действительно хотите, чтобы все позиции занимали следующие четыре символа, они не «аааа»? – njsf