다음 정규식을 사용하면 이스케이프가 [{-]
필요하지 않은 것 같습니다 {
. 맞습니까? 대괄호 표현식에서 이스케이프 처리할 필요가 없는 다른 문자는 무엇입니까?
답변1
수십 가지의 다양한 정규식 유형이 있다는 점에 유의하세요. POSIX 표준은 최소 4개(BRE, ERE, awk ERE, ex
/ vi
BRE)와 perl
PCRE vim
등과 같은 더 많은 항목을 지정합니다.ksh93
존재하다POSIX BRE( grep
/에서 사용 sed
) 및오히려grep -E
( / sed -E
또는 bash
1 에서 사용 [[ =~ ]]
), 내부대괄호 표현( [...]
), 유일한 특수 문자는 ^
(첫 번째 문자인 경우), ]
(첫 번째 또는 다음 문자가 아닌 경우 ]
), -
(첫 번째, 마지막 또는 다음 문자가 아닌 경우 ^
) 및 일부, , ...가 [
개행 문자의 일부인 경우입니다. , 그 자체로는 특별하지 않더라도 정규식 구문의 정규식은 정규식을 구분하는 등 정규식을 사용하는 유틸리티에서 특별한 경우가 많습니다.[.x.]
[:class:]
[=e=]
grep
\
이는 특별하지 않으며 이론적으로 문자를 이스케이프하거나 \t
TAB과 같은 것을 지정하는 데 사용할 수 없습니다.
[\-~]
\
에서 까지의 다양한 문자와 일치하도록 설계되었습니다 ~
. -
또는 을 일치시키려면 또는 를 ~
사용하십시오 . 필요가 가장 먼저 오거나 마지막에 오고, 필요가 가장 먼저 오며, 뒤에 또는 가 뒤따르면 안 된다는 점 을 기억하십시오 .[~-]
[-~]
-
]
[
.
=
:
{
그것은 결코 특별하지 않지만 -
, 당신처럼 마지막 위치에 있을 때는 그렇지 않습니다.
[\t]
BRE와 ERE 에서는 합계 일치 또는 가 필요하지만 [t\]
여러 유틸리티가 해당 요구 사항을 무시하기 때문에 이에 의존하지 않습니다. or를 일치시키려면 or를 사용하세요.\
t
[\\t]
[\\t]
\
t
예를 들어 GNU에서는 sed
해당 환경을 제외 하고 대신 sed 's/[\t]//'
TAB을 제거하십시오 .\
t
$POSIXLY_CORRECT
¹ 흥미롭게도 인용된 대로 true를 bash
반환 하는 데 사용되며 정규 표현식이 이스케이프가 필요하지 않은 이스케이프 지점을 시도하므로 정규식 엔진을 호출하며 4.4는 여전히 같은 이유로 true를 반환하지 못합니다.[[ '\' =~ ['.'] ]]
.
[\.]
[[ '\' =~ [^]'.'] ]]