sourceslist.nanorc
에서이 정규식을 도와 줄 수 있습니까?
정규식 :
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
오류 :
Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end
감사합니다.
댓글
답변
문자 목록에서 -
기호의 위치가 문제 일 가능성이 높습니다.
[a-z]
가 iv id = “의 약자 인 것처럼 [start-end]
로 문자 범위를 표현할 수 있다는 사실을 이미 사용했습니다. 8338d40c9e “>
(아래주의 사항 참조). 즉, -
는 특수 문자이며 두 " 일반 " 문자의 경우이 두 문자와 그 사이의 모든 문자를 포함하는 또 다른 범위를 나타내는 것으로 해석됩니다.
물론 -
는 정렬 순서에서 사전 식으로 " 나중에 " 다음 그 앞에 오는 문자입니다. 이는 오류 메시지의 원인이기도합니다. 문제가 해결되지는 않지만 대신 (-_
라고 말하면 사라진다는 것을 알 수 있습니다.
분명히 원하기 때문에 리터럴 -
와 일치하고 .nanorc
에서 정규식이 해석되는 방식에 따라
- 이스케이프 처리 (예 :
\-
)하거나 - 문자의 첫 번째 또는 마지막에 배치 목록 (예 :
[-etc]
또는[etc-]
) 이는 POSIX 및 GNU 정규 표현식 에서 표준이됩니다. Linux 시스템에서 가장 가능성이 높은 솔루션 .
예 : 자세한 내용은 여기 를 참조하세요.
주의 사항 : 위의 " [a-z]
는 [abcdefghijkl...xyz]
의 약칭입니다. 무조건 사실이 아닙니다 ! 범위가 해석되는 방식은 로케일 설정, 특히 데이터 정렬 순서에 따라 다릅니다.
- " C " 로케일에서 순서는 ASCII 코드 값 (예 :
ABC...XYZ...abc...xyz
)을 따릅니다. 여기서[a-z]
는 실제로 " 모든 소문자 "를 의미합니다. - 대부분의 다른 로케일에서는 대문자와 소문자가 함께 그룹화됩니다. 즉, 순서는
aAbBcC...xXyYzZ
입니다. 여기서[a-z]
는 "Z
를 제외한 모든 소문자와 모든 대문자를 의미합니다. - " 움라우트 "와 같은 비 ASCII 문자의 처리는 또 다른 문제입니다.
답변
https://regexr.com/ 는 디버그를 개선하는 데 도움이됩니다.
-
와 같이 범위에서 -
를 이스케이프하지 않았습니다. 범위를 지정하는 데 사용됩니다.
이전 :
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
수정 :
cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/
댓글
- 링크 감사합니다
- 괄호로 묶인 표현에서 대시를 이스케이프하는 것은 도움이되지 않습니다. 백 슬래시는
[...]
내부의 표현식에 특별한 의미가 없습니다. 이는 또한[\.]
가 점 또는 백 슬래시와 일치 함을 의미합니다. - 정말? 의심 스럽다. 슬래시와 일치하려면 일치하도록 두 번 이스케이프해야합니다. \\
- @JamesJohn Try e.g.
grep '[\]' <<<'\'
또는grep -o '[\.]' <<<'123\.abc'
- grep에 문제를 붙여넣고 오류를 확인한 다음 수정 사항을 적용하여 수정합니다.
-
)를 이스케이프해야합니다. 범위로 해석 될 수 있습니다 …