Tcl regexp: 변수에 숫자가 포함되어 있는지 확인하는 방법은 무엇입니까?

Tcl regexp: 변수에 숫자가 포함되어 있는지 확인하는 방법은 무엇입니까?

다음은 변수에 0-9 숫자가 있는지 확인하는 tcl 스크립트입니다.

    set a "abc"

    if {[ regexp {[0-9]*} $a ]} {
       puts "Found number in $a"
    } else {
       puts "Doesn't find number in $a"
    }

하지만 실행하면 "Abc에서 찾은 번호"라고 보고됩니다.

답변1

사용한 정규식은 "0개 이상의 숫자 일치"를 의미하기 때문입니다. 이 문자열은 abc0개의 숫자와 일치하므로 긍정적인 결과를 얻습니다. *("0 이상") 만 제거 하면 예상대로 작동합니다.

set a "a2bc"

if {[ regexp {[0-9]} $a ]} {
        puts "Found number in $a"
} else {
        puts "Doesn't find number in $a"
}

답변2

정규식에서 *"이전에 지정된 문자 또는 클래스가 0개 이상"을 의미합니다. 따라서 숫자가 0개 이상인 문자열을 찾고 있습니다. 이것은 모든 것과 일치합니다.

답변3

정규 표현식을 사용하지 않고도 glob 스타일 패턴을 사용하여 이 문제를 해결할 수도 있습니다.

if {[string match {*[0-9]*} $a]} { ...

바라보다string match문서.

관련 정보