잘못된 정규식: 유효하지 않은 범위 끝

잘못된 정규식: 유효하지 않은 범위 끝

이 정규식을 도와주실 수 있나요 sourceslist.nanorc?

정규식:

cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/

실수:

Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end

감사해요.

답변1

문제는 -문자 목록에서 플래그의 위치일 수 있습니다.

문자 범위를 사용하여 as를 약칭으로 나타낼 수 있다는 사실을 이미 사용했습니다(아래 경고 참조). 즉, 두 개의 "일반" 문자 사이에 특수 문자가 나타나면 해당 두 문자와 그 사이의 모든 문자를 포함하는 다른 범위를 나타내는 것으로 해석됩니다.[start-end][a-z][abcdefghijkl...xyz]-

언제-(-_그것은 당신의 문제를 해결하지 못합니다).

당신은 분명히 리터럴과 일치하기를 원하기 -때문에정규 표현식이 어떻게 해석되는지에 따라 다릅니다..nanorc, 당신은

  • 이스케이프해야 합니다(예: \-). 또는
  • 문자 목록(예: 또는 )의 첫 번째나 마지막에 넣는 것은 POSIX 및 GNU 정규 표현식의 표준입니다.[-etc][etc-]따라서 Linux 시스템에서 가장 가능성이 높은 솔루션.

예를 들어 참조하십시오.여기추가 참조를 위해.

경고하다: 위의 진술 "은 다음 과 같이 [a-z]축약됩니다 .[abcdefghijkl...xyz]무조건 참은 아니다! 범위가 해석되는 방식은 로케일, 특히 조합 순서에 따라 다릅니다.

  • "C" 로캘에서 순서는 ASCII 코드 값(예: )을 기준으로 합니다 ABC...XYZ...abc...xyz. 여기서는 [a-z]실제로 "모두 소문자"를 의미합니다.
  • 대부분의 다른 로케일에서는 대문자와 소문자를 순서대로 결합합니다 aAbBcC...xXyYzZ. 여기서는 [a-z]"을 제외한 모든 소문자 및 모든 대문자를 의미합니다 Z.
  • "움라우트"와 같은 비ASCII 문자 처리는 또 다른 문제입니다.

바라보다여기그리고여기이 주제에 대한 추가 토론을 원하시면

답변2

이것을 붙여넣으세요https://regexr.com/더 나은 디버깅에 도움이 됩니다.

범위를 지정하는 데 사용된 -범위 내에서 이스케이프 되지 않습니다 .-

오래된:

cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/

옳은:

cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/

관련 정보