이 표현 패턴은 무엇을 '^[0-9]+$'
확인하나요?
#!/usr/bin/env bash
if [[ $VAR =~ '^[0-9]+$' ]]; then
execute code
fi
답변1
정규식은 ^[0-9]+$
연속된 숫자로 구성된 비어 있지 않은 문자열, 즉 숫자로만 구성된 비어 있지 않은 줄과 일치합니다. 3.2 이상에서 해당 정규식을 사용하려면 따옴표 없이 그대로 두어야 합니다. 즉, 코드 [[ ... =~ there ]]
조각 은 다음과 같아야 합니다.bash
^[0-9]+$
'^[0-9]+$'
#!/usr/bin/env bash
if [[ "${VAR}" =~ ^[0-9]+$ ]]; then
#execute code
fi
답변2
정규 표현식은 처음(^)부터 끝($)까지 하나 이상의 (+) 숫자 [0-9]와 일치할 때 VAR의 내용과 일치합니다. 줄에는 양쪽 끝에서 [0-9] + ^ 및 $와 일치하는 숫자만 포함되어야 합니다.
다양한 입력에 대해 정규식을 테스트하는 프로그램
$ cat flub
#!/usr/bin/bash
for VAR in 3a3 '^[0-9]+$' 2 1919181818 flub 282_2828 '38938 2828' '3939.' '.3939'
do
echo -n "Testing $VAR : "
if [[ "$VAR" =~ ^[0-9]+$ ]]; then
echo "$VAR" matches
else
echo
fi
done
산출
$ ./flub
Testing 3a3 :
Testing ^[0-9]+$ :
Testing 2 : 2 matches
Testing 1919181818 : 1919181818 matches
Testing flub :
Testing 282_2828 :
Testing 38938 2828 :
Testing 3939. :
Testing .3939 :
그리고 작은따옴표로 묶인 확장 정규식 부분은 리터럴 문자열에만 일치합니다.
$ cat flub
#!/usr/bin/bash
for VAR in 3a3 '^[0-9]+$' 2 1919181818 flub 282_2828 '38938 2828' '3939.' '.3939'
do
echo -n "Testing $VAR : "
if [[ "$VAR" =~ '^[0-9]+$' ]]; then
echo "$VAR" matches
else
echo
fi
done
$ ./flub
Testing 3a3 :
Testing ^[0-9]+$ : ^[0-9]+$ matches
Testing 2 :
Testing 1919181818 :
Testing flub :
Testing 282_2828 :
Testing 38938 2828 :
Testing 3939. :
Testing .3939 :
답변3
테스트는 $VAR
문자열이 포함되어 있는지 테스트하는 것입니다 ^[0-9]+$
. $VAR
정규식을 테스트하려면 ^[0-9]+$
따옴표를 제거하세요.
정규식이 일치하면 테스트가 참입니다. 의 문자열에 $VAR
숫자만 포함된 경우(그리고 최소한하나숫자).
동일한 테스트를 수행하는 또 다른 방법은 다음을 사용하는 것입니다 case
(이렇게 하면 를 제외한 다른 쉘로 이식 가능하게 됩니다 bash
).
case "$VAR" in
*[!0-9]*)
# string has non-digits
;;
*[0-9]*)
# string has at least one digit
# (and no non-digits because that has already been tested)
;;
*)
# string must be empty due to the previous two tests failing
esac
답변4
정규식이 무엇을 의미하는지 확실하지 않다면 다양한 온라인 도구 중 하나를 사용하세요. 표현식의 어느 부분이 무엇을 하는지 정확히 알려주며, 심지어 예를 들어 일치 항목도 표시합니다.
이것은 예이다https://regex101.com/(다른 훌륭한 사이트도 있습니다):