Perl Grep команда для поиска в массиве - PullRequest
0 голосов
/ 22 марта 2019

Я использую команды Perl и grep для поиска шаблона в выводе массива.Я заинтересован в поиске следующего текста в массиве:

/tmp/12345.hash

12345 может быть любой последовательностью чисел, например 234 или 567889, но /tmp/ и .hashбудет последовательным.Я не очень хорошо разбираюсь в regex, поэтому не уверен, как построить правильное выражение regex.

@line = grep /hash/, @exp;

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

1 Ответ

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

Regex позволяет вам кодировать требования в «шаблон» с гораздо большей точностью:

my @filtered = grep { m{^/tmp/[0-9]+\.hash$} } @all;

Я использую {} для разделителей, так как с обычными // каждый в / вшаблон должен быть экранирован.Тогда m требуется впереди (в отличие от // разделителей, где он может быть опущен).

Якорь ^ соответствует началу строки (и в других позициях, если действует «модификатор» /m) .Кажется, что /tmp является началом пути, но если бы перед ним были (например) пробелы, то вышеприведенное не совпадало бы (если вы не измените его на ^\s*/tmp, чтобы учесть дополнительные пробелы).Внимательно рассмотрите свои данные.

$ соответствует концу строки или перед новой строкой в ​​конце, если она есть (модификатор /m меняет это) .Чтобы также сопоставлять строки с большим количеством символов после hash, удалите $.

Сам шаблон определяет то, что вы говорите в описании проблемы: должно быть целое число, которое меняется, а остальное исправлено.

Собственная (отличная) документация Perl поставляется с учебным пособием perlretut .


С модификатором $str =~ /.../m,строка обрабатывается как многострочная строка, поэтому если в ней есть переводы строк, то ^ и $ в этом регулярном выражении также соответствуют началу и концу каждой строки.

Якорь, который всегда соответствуеттолько конец строки равен \z (также см. \Z, что соответствует $, но нечувствительно к /m).См. Утверждения в perlre и ответы на на этой странице .

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