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에 문제를 붙여넣고 오류를 확인한 다음 수정 사항을 적용하여 수정합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다