[0-9]{3}와 [0-9]의 차이점은 무엇입니까?정규 표현식에서 {3}?

[0-9]{3}와 [0-9]의 차이점은 무엇입니까?정규 표현식에서 {3}?

파일이 있어요 -

cat regex30.txt 
(914).582.3013
(873).334.2589
(521).589.3147
(625).235.3698
(895).568.2145
(745).256.3369

으로 변환하고 싶습니다.

914.582.3013
873.334.2589
521.589.3147
625.235.3698
895.568.2145
745.256.3369

내 단계는 다음과 같습니다.

sed -r 's/\(([0-9]<Space>{3})\)(\.[0-9]{3}\.[0-9]{4})/\1\2/g' regex30.txt 

그런 다음 결과를 얻습니다.

(914).582.3013
(873).334.2589
(521).589.3147
(625).235.3698
(895).568.2145
(745).256.3369

왜 이런 결과가 나오나요? 공간이 있다는 것이 왜 중요한가?

공간을 제거하면 제대로 작동합니다.

sed -r 's/\(([0-9]{3})\)(\.[0-9]{3}\.[0-9]{4})/\1\2/g' regex30.txt 
914.582.3013
873.334.2589
521.589.3147
625.235.3698
895.568.2145
745.256.3369

제가 이해한 바에 따르면 [0-9] {3}-는 0부터 시작할 수도 있는 3자리 숫자를 나타냅니다.

[0-9]{3}정규식과 의 차이점은 무엇입니까 [0-9] {3}?

공간이 있다는 것이 왜 중요한가, 아니면 동시에 볼 수 없는 것인가.

공백을 표현하기 위해 '\s'를 사용했다고 생각했습니다.

답변1

면책 조항: 정규식을 구문 분석하지 않았습니다. 귀하의 질문에 대한 답변은 다음과 같습니다.

[0-9]{3}정확히 소수점 이하 세 자리를 나타냅니다. [0-9] {3}10진수 뒤에 공백 3개가 오는 것을 나타냅니다. 이는 {3}(소위 "번들"이라고 함) 선행하는 소위 "원자"를 반복하기 때문입니다 .

정규식 매뉴얼 페이지에서:

$ man regex
... An atom followed by a bound containing one integer i and no comma 
matches a sequence of exactly i matches of the atom. ...

"원자"라는 용어는 다음 단락에서 정의됩니다. 잘 읽었습니다.

답변2

공백을 무시할 수 있는 내가 아는 유일한 정규식은 perl 정규식 또는 호환 정규식 및 ast-open 정규식(perl 정규식에서 많은 연산자를 차용함)입니다. 기본적으로는 이 작업을 수행하지 않지만 x이 플래그가 활성화된 경우에만 이 작업을 수행하십시오.

AFAIK, ssed-R 옵션이 있는 PCRE만 지원됩니다.

따라서 다음이 필요합니다.

ssed -R 's/ \d {3}/.../gx'
ssed -R 's/(?x) \d {3}/.../g'

또는 (ast-open sed활성화된 경우 sedksh93도 내장되어 있습니다):

ast-sed    's/\(?x\) \d \{3\}/.../g'
ast-sed -E 's/(?x) \d {3}/.../g'
ast-sed -A 's/(?x) \d {3}/.../g'

(기본, 확장, 고급의 세 가지 정규식 유형을 지원합니다).

이 플래그가 활성화되면 리터럴 공백 문자와 일치하도록 공백 앞에 공백을 붙여야 x합니다 (또는 ASCII 기반 시스템에서 사용).[ ]\\x20

관련 정보