다음은 변수에 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개 이상의 숫자 일치"를 의미하기 때문입니다. 이 문자열은 abc
0개의 숫자와 일치하므로 긍정적인 결과를 얻습니다. *
("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
문서.