"^[0-9]+$"은(는) 무슨 뜻인가요?

"^[0-9]+$"은(는) 무슨 뜻인가요?

이 표현 패턴은 무엇을 '^[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/(다른 훌륭한 사이트도 있습니다): 정규식

관련 정보