대괄호 표현식 "[...]"에서 어떤 문자를 이스케이프해야 합니까?

대괄호 표현식 "[...]"에서 어떤 문자를 이스케이프해야 합니까?

다음 정규식을 사용하면 이스케이프가 [{-]필요하지 않은 것 같습니다 {. 맞습니까? 대괄호 표현식에서 이스케이프 처리할 필요가 없는 다른 문자는 무엇입니까?

답변1

수십 가지의 다양한 정규식 유형이 있다는 점에 유의하세요. POSIX 표준은 최소 4개(BRE, ERE, awk ERE, ex/ viBRE)와 perlPCRE vim등과 같은 더 많은 항목을 지정합니다.ksh93

존재하다POSIX BRE( grep/에서 사용 sed) 및오히려grep -E( / sed -E또는 bash1 에서 사용 [[ =~ ]]), 내부대괄호 표현( [...]), 유일한 특수 문자는 ^(첫 번째 문자인 경우), ](첫 번째 또는 다음 문자가 아닌 경우 ]), -(첫 번째, 마지막 또는 다음 문자가 아닌 경우 ^) 및 일부, , ...가 [개행 문자의 일부인 경우입니다. , 그 자체로는 특별하지 않더라도 정규식 구문의 정규식은 정규식을 구분하는 등 정규식을 사용하는 유틸리티에서 특별한 경우가 많습니다.[.x.][:class:][=e=]grep

\이는 특별하지 않으며 이론적으로 문자를 이스케이프하거나 \tTAB과 같은 것을 지정하는 데 사용할 수 없습니다.

[\-~]\에서 까지의 다양한 문자와 일치하도록 설계되었습니다 ~. -또는 을 일치시키려면 또는 를 ~사용하십시오 . 필요가 가장 먼저 오거나 마지막에 오고, 필요가 가장 먼저 오며, 뒤에 또는 가 뒤따르면 안 된다는 점 을 기억하십시오 .[~-][-~]-][.=:

{그것은 결코 특별하지 않지만 -, 당신처럼 마지막 위치에 있을 때는 그렇지 않습니다.

[\t]BRE와 ERE 에서는 합계 일치 또는 가 필요하지만 [t\]여러 유틸리티가 해당 요구 사항을 무시하기 때문에 이에 의존하지 않습니다. or를 일치시키려면 or를 사용하세요.\t[\\t][\\t]\t

예를 들어 GNU에서는 sed해당 환경을 제외 하고 대신 sed 's/[\t]//'TAB을 제거하십시오 .\t$POSIXLY_CORRECT


¹ 흥미롭게도 인용된 대로 true를 bash반환 하는 데 사용되며 정규 표현식이 이스케이프가 필요하지 않은 이스케이프 지점을 시도하므로 정규식 엔진을 호출하며 4.4는 여전히 같은 이유로 true를 반환하지 못합니다.[[ '\' =~ ['.'] ]].[\.][[ '\' =~ [^]'.'] ]]

관련 정보