Регулярное выражение в зависимости от длины

Регулярное выражение, которое принимает только строки длиной, кратной 5 плюс 2. Например: 7, 12, 32 и т. д. Кто-нибудь знает?

-3
22.06.2020, 18:57
1 ответ

Если вы действительно хотите использовать регулярное выражение, «^.. (.{5} )+$», интерпретируемое как расширенное регулярное выражение, делает свое дело; вы можете использовать его, например, сgrep -E:

for i in {1..20}; do printf "%.${i}s\n" --------------------; done | grep -E '^..(.{5})+$'

Это можно переписать как обычное регулярное выражение «^.. (.{5} )+$».

Оба этих выражения привязаны к началу и концу совпадающего текста, поэтому они соответствуют полным строкам. «..» соответствует любым двум символам, «(.{5} )» соответствует любым пяти символам, а «+» повторяет это последнее совпадение хотя бы один раз. Таким образом проверяется, что каждая строка содержит число символов, равное 5× n +2 для n  > 0.

Кроме того, другие инструменты могут очень быстро проверять длину линий:

... | awk 'length > 5 && length % 5 == 2'
7
18.03.2021, 23:25

Теги

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