Сопоставление повторяющегося шаблона с использованием регулярных выражений

Проверено с помощью команды sed, все работает нормально

команда:

  sed -r "s/^\s+//g" filename| sed '/^\/\*.*\*\/$/d'

выход:

printf("It is /* Comment 2 */\n");
x = 5; /* Comment 3 */
/* Comment 5 */ y = 0;
/*
* Comment 6
*/
// Comment 7
2
25.07.2021, 13:50
1 ответ

Использование Raku (, ранее известного как Perl _6)

raku -ne '.put if m:g/^^ [ [\d+ [\-\d+]?] [\,|$$] ]+ $$/;'

Пример ввода:

1,2,3-5,6
1,2,3-5,6,
1
1-3
1,2,3-,4,5-7
1,2,3-,4,5-7,
1,2,-3,4,5
1,2,-,3,4
1,2,,,3,4
,1,2,3

Пример вывода:

1,2,3-5,6
1,2,3-5,6,
1
1-3

Преимуществом использования Raku является толерантность к пробелам в сопоставителе. Это делает код более читаемым. Во-вторых, модификаторы базового движка регулярных выражений, такие как :global, получают начальное двоеточие и появляются в начале конструкции соответствия m/.../. Это также делает регулярное выражение более читабельным.

Буквальное прочтение приведенного выше регулярного выражения гласит::'Найти еще одну -или -цифру, за которой следует необязательный (ноль -или -единица )тире -единица -или еще -цифр, за которыми следует либо запятая, либо конец -строки -($$), весь предыдущий шаблон повторяется еще один -или -раз».

Теперь вы можете спросить себя: «Ну и что? Он выглядит точно так же, как Perl5». Это потому, что приведенный выше код является почти прямым переводом Perl5/PCRE. Фактически, Raku (, то есть Perl6 ), имеет новую идиому «разделитель» (, то есть «модифицированный квантификатор» ), который можно использовать для решения общих проблем с регулярными выражениями. А именно:

raku -ne '.put if m:g/^^ [\d+ [\-\d+]? ]+ % "," $$/;'

ИЛИ

raku -ne '.put if m:g/^^ [\d+ [\-\d+]? ]+ %% "," $$/;'

Первая строка, использующая %, обнаруживает совпадения, в которых запятая-разделитель вставляется между шаблоном слева. Вторая строка, использующая %%, делает то же самое --, но также допускает запятую в конце. Твой выбор.

Гуру Perl Дамиан Конвей утверждает, что Raku (, т. е. Perl6 ), представляет собой совершенно новый вариант регулярных выражений :, если вы попробуете его, то, возможно, согласитесь.

https://docs.raku.org/language/regexes#Modified_quantifier:_%,_%%
https://youtu.be/ubvSjW6Nyqk
https://raku.org/

0
10.09.2021, 20:42

Теги

Похожие вопросы