Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

Regex - filtrando números pares e ímpares.

Montando uma expressão regular para verificar se um número é par ou impar.

Antes de sair desesperado montando a regex, precisamos entender a expressão que iremos validar.

Qual é a regra que define se um número é par ou ímpar ?

Um número par quando dividido pelo número dois, tem como resultado um número inteiro, caso contrário esse número é ímpar.
O número zero por uma série de fatores que não precisamos mencionar aqui, também é considerado par.

Tendo essas informações em mente, podemos afirmar que qualquer número inteiro, independentemente da quantidade dígitos poderá ser considerado par, desde de que o último dígito seja par, o mesmo conceito aplica-se ao número ímpar.

Para validar precisamos que:

  • Comece com um número inteiro de 0 à 9 contendo zero ou mais dígitos.
    • ^[0-9]*

Para número:

  • Par
    • O último dígito tem ser qualquer um dos números pares: 0 2 4 6 8.
      • [02468]$


  • Ímpar
    • O último dígito tem ser qualquer um dos números ímpares: 1 3 5 7 9.
      • [13579]$

Agora que já montamos as partes da nossa regex, vamos uni-las para conseguir nosso objetivo.

Primeiro, vou iniciar uma contagem de 0 à 20 sem aplicar nenhum tipo de filtro.


$ printf '%d\n' {0..20}
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Agora vou realizar a mesma contagem, porém filtrando apenas os números pares, utilizando a nossa regex '^[0-9]*[02468]$'.


$ printf '%s\n' {0..20} | egrep '^[0-9]*[02468]$'
0
2
4
6
8
10
12
14
16
18
20

Note que somente os números pares foram retornados, pois os ímpares não casaram com a expressão.

Agora, vou repetir o processo, filtrando apenas os números ímpares, utilizando a expressão '^[0-9]*[13579]$'.


printf '%s\n' {0..20} | egrep '^[0-9]*[13579]$'
1
3
5
7
9
11
13
15
17
19

Também podemos utilizar a expressão com o comando if para avaliar os dados informados pelo usuário.

Exemplo


#!/bin/bash

# Declarando variável do tipo inteiro,
# caso o valor seja nulo ou inválido, assume valor 0.
declare -i num

# Lê o número informado pelo usuário.
read num

# Verifica se o número é par
if [[ $num =~ ^[0-9]*[02468]$ ]]; then
    echo "Número par"
else
    # Senão é impar.
    echo "Número impar."
fi
# fim


Resumindo, se um dia precisarem realizar tal tarefa, já sabem:

Números pares: '^[0-9]*[02468]$'
Números ímpares: '^[0-9]*[13579]$'


Claro que existem inúmeras formas de fazer isso e espero futuramente aborda-las. 

Valeu jovens, um grande abraço e até a próxima. 
 

Comentários

Contato

Nome

E-mail *

Mensagem *