Perl - найти одинаковую последовательность символов в строках - PullRequest
0 голосов
/ 22 марта 2019

На самом деле, у меня есть текстовый файл, в котором предложения пишутся в каждой строке, и я должен найти одинаковые последовательности символов для каждого предложения в каждой строке. Например, одно из предложений

no pain no gain

и я хочу иметь возможность определить, что последовательность общих символов в этой строке равна ain.

Я пытался с помощью регулярных выражений (кстати, в stackoverflow), но это было для поиска последовательностей с одинаковыми последовательными символами, и это не то, что я ищу. Поэтому, как новичок в Perl, я не знаю, как это реализовать. Заранее благодарим вас за ваше время и внимание.

edit: вот что я пробовал, но не то, что я хочу:

#!/usr/bin/perl

use utf8;

open $file, "<:encoding(utf8)", "text.txt";

while($ligne=<$file>)
{   
    while($ligne =~ /(.)\1+/g)
    {
        $gram = $1;
        print "$ligne\n";
        print "$gram\n";
    }
}

1 Ответ

0 голосов
/ 22 марта 2019

Это простое доказательство концепции, которая соответствует ain «боли», а затем ищет то же совпадение позже в строке, которую затем находит в «усилении». Я использую "match named subpattern 'Match', который соответствует регулярному выражению в ain (или нет).

#!/usr/bin/perl
use strict;
use warnings;

my $string = "no pain no gain";

if ($string =~ m/(?<Match>[a-zA-Z]{3}).*\k<Match>/g) {
    print "Match: $+{Match}\n";
}

Выход:

Match: ain

Обратите внимание, что если вы измените спецификатор длины на 2, совпадение станет "нет", а не "ain".

Внедрение более надежного регулярного выражения для любых ваших реальных потребностей, просто итерация по каждой строке и проверка на соответствие.

Кстати, regex101.com - удивительный ресурс для изучения и практики регулярных выражений. Я рекомендую это 10000%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...