2012-07-17 4 views
1

파일에서 패턴을 찾고 싶지만 패턴은 여러 가지 형식을 가질 수 있습니다.비정규 성 정규 표현식 검색

while {[gets $thefile line] >= 0} { 
    for {set nb_table 1} {$nb_table<$count_table} {incr nb_table} { 
      if { [regexp {pattern_$nb_table} $line] } { 
      puts "I found one !" 
      } 
    } 
} 

var에 $count_table를 알고하는 다른 절차에에 전 사로 잡았 : 다음은 코드입니다.

만약 내가 루프에 대한 모든 테이블의 이름을 가지고있어 pattern_$nb_table의 놨는데, 좋은,하지만 난 결코 I found one! (내가 다른 프로세스가되고 싶지만 그것은 주제가되지 않습니다)가 인쇄되지 않았습니다. 왜 나는 결코 if에 들어 가지 않습니까? 내 파일에 다음과 같은 패턴이 있습니다. pattern_1 pattern_2 .....

답변

1

변수가 정규식으로 대체되지 않습니다 ({ ... } 모든 즉각적인 대체 사용 안 함). 이것은 당신이 사용하는 거라고 상황이다 (다만 명확성을 위해 괄호로 변수 이름을 넣어, 및 을 강조하기위한 따옴표 패턴을 넣어에만) :

if {[regexp "pattern_${nb_table}" $line]} { ... } 

를 제외하고 그 나는 문자열을 찾는 경우 '당신을 제공,이 두 빨리 정규 표현식 매칭보다

if {[string first "pattern_${nb_table}" $line] >= 0} { ... } 
if {[string match "*pattern_${nb_table}*" $line]} { ... } 

: 간단, 나는 string first 또는 string match 사용하려고 할 것 뭔가 간단 해. 나머지 부분이pattern 일 경우 정규 표현식이면 regexp 만 사용됩니다. 당연하지.

+0

완벽하게 작동합니다! 감사 – heyhey

관련 문제