이 정규식을 도와주실 수 있나요 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\._\-\(\) ]+\]/