Expressão Regular está correta porém não entra no if

1. Expressão Regular está correta porém não entra no if

Sergio Deusdedith de Araujo Neto
osergioneto

(usa Ubuntu)

Enviado em 31/10/2018 - 20:24h

Gostaria de saber pq meu código não está entrando nesse if mais interno. Testei o regex por uns sites e está funcionando. Testei com esse valor: nucepe-2018-pc-pi-perito-criminal-informatica-prova.pdf

#!/bin/bash

#Declarando regex que vão ser utilizadas
regex_prova='(prova)'
regex_banca='((?:[a-z][a-z0-9_]*))'
regex_ano='\b(19|20)\d{2}\b'
regex_orgao='.*?(?:[a-z][a-z0-9_]*).*?((?:[a-z][a-z0-9_]*))'
regex_cargo=

#Percorrendo todos os arquivos pdf na pasta
for file in *.pdf

do
#Pegando o nome do pdf
str=$file

#Verificando se existe a palavra prova no nome do arquivo
if [[ $str =~ $regex_prova ]]; then

#Pega qual é a banca
if [[ $str =~ $regex_banca ]]; then

echo $str #Não entra aqui
#echo ${BASH_REMATCH[1]} #Não entra aqui
else
echo 'Erro na Regex_banca'
fi

#Pega qual é o ano da prova
if [[ $str =~ $regex_ano ]]; then

echo ${BASH_REMATCH[1]}
else
echo 'Erro no Regex_Ano'
fi

else
echo 'Erro na Regex_prova'
fi


done



  


2. Re: Expressão Regular está correta porém não entra no if

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2018 - 00:17h

osergioneto escreveu:

Gostaria de saber pq meu código não está entrando nesse if mais interno.
Testei o regex por uns sites e está funcionando.
Testei com esse valor: nucepe-2018-pc-pi-perito-criminal-informatica-prova.pdf

#!/bin/bash

#Declarando regex que vão ser utilizadas
regex_prova='(prova)'
regex_banca='((?:[a-z][a-z0-9_]*))'
regex_ano='\b(19|20)\d{2}\b'
regex_orgao='.*?(?:[a-z][a-z0-9_]*).*?((?:[a-z][a-z0-9_]*))'
regex_cargo=

#Percorrendo todos os arquivos pdf na pasta
for file in *.pdf

do
#Pegando o nome do pdf
str=$file

#Verificando se existe a palavra prova no nome do arquivo
if [[ $str =~ $regex_prova ]]; then

#Pega qual é a banca
if [[ $str =~ $regex_banca ]]; then

echo $str #Não entra aqui
#echo ${BASH_REMATCH[1]} #Não entra aqui
else
echo 'Erro na Regex_banca'
fi

#Pega qual é o ano da prova
if [[ $str =~ $regex_ano ]]; then

echo ${BASH_REMATCH[1]}
else
echo 'Erro no Regex_Ano'
fi

else
echo 'Erro na Regex_prova'
fi
done


Boa noite Sergio.
Testei suas REGEX, segue resultado:
arq="nucepe-2018-pc-pi-perito-criminal-informatica-prova.pdf"
egrep --color '(prova)' <<< $arq
nucepe-2018-pc-pi-perito-criminal-informatica-prova.pdf
OK
egrep --color '((?:[a-z][a-z0-9_]*))' <<< $arq
NOK
egrep --color '\b(19|20)\d{2}\b' <<< $arq
NOK
Faça:
egrep -o '\b[0-9]{4}\b' <<< $arq
egrep --color '.*?(?:[a-z][a-z0-9_]*).*?((?:[a-z][a-z0-9_]*))' <<< $arq
NOK
Com exceção de ANO e PROVA, as demais regex não sei o que vc quer casar....

Att.:
Marcelo Oliver







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts