리터럴 [ 및 ]를 포함하는 패턴

리터럴 [ 및 ]를 포함하는 패턴

다음 패턴을 사용하여 리터럴 과 대괄호를 beg_ere어떻게 사용할 수 있습니까 ?(asmb)[]

#!/usr/local/bin/awk -f
BEGIN {
  beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+(faml) [(asmb)]([[:space:]]*).*$"
}

$0 ~ beg_ere { print "MATCH" }

여기서 famlasmb는 사용자 정의 문자열이거나, 사용자 정의 문자열이 아닌 경우 설명입니다 "[[:graph:]]+".

이 경우

beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+(faml) [([[:graph:]]+)]([[:space:]]*).*$"

다음 줄이 포함된 파일을 사용할 때 MATCH가 인쇄되지 않습니다.

## HD [opcon]

## HD [opcon] key

## HD [opcon] akey,bkey  

쉼표로 구분된 키는 원하는 수만큼 있을 수 있습니다.

답변1

백슬래시를 사용하여 이스케이프 처리하면 됩니다.

그러나 정규식은 큰따옴표로 묶인 문자열이므로 백슬래시를 이스케이프해야 합니다.

  beg_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+(HD) \\[([[:graph:]]+)\\]([[:space:]]*).*$"
  # .....................................................^^^..............^^^

관련 정보