Kan du hjælpe med denne regex i min sourceslist.nanorc
?
Regex:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Fejl:
Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end
Tak.
Kommentarer
- Måske skulle du slippe for bindestreg (
-
): dette kan fortolkes som et interval …
Svar
Problemet er sandsynligvis placeringen af -
-tegnet i din tegneliste.
Du har allerede brugt det faktum, at tegnintervaller kan udtrykkes ved, at [start-end]
, som i [a-z]
er stenografi for [abcdefghijkl...xyz]
(skønt se advarslen nedenfor). Det betyder, at -
er et specielt tegn, og hvis det forekommer mellem to " almindeligt " tegn fortolkes det som en indikation af endnu et område, der omfatter disse to tegn og alle derimellem.
Dette fungerer selvfølgelig kun, hvis tegnet efter -
er leksikografisk " senere " i sorteringsrækkefølgen, så tegnet forud for det, hvilket også er årsagen til din fejlmeddelelse (du vil se, at det forsvinder, hvis du i stedet siger (-_
, selvom det ikke løser dit problem ).
Da du naturligvis vil have for at matche den bogstavelige -
og afhængigt af hvordan regulære udtryk fortolkes i .nanorc
, skal du enten
- skal undslippe det (dvs.
\-
) eller - placere det først eller sidst i tegnet liste (dvs.
[-etc]
eller[etc-]
) som ville være standard i POSIX og GNU regulære udtryk den mest sandsynlige løsning på et Linux-system .
Se f.eks. her til yderligere reference.
Advarsel : Udsagnet ovenfor " [a-z]
at være stenografi for [abcdefghijkl...xyz]
er ikke ubetinget sandt ! Hvordan rækkevidden fortolkes afhænger af landets indstillinger, specifikt sorteringsrækkefølgen.
- I " C " locale, rækkefølgen er i overensstemmelse med ASCII-kodeværdien, dvs.
ABC...XYZ...abc...xyz
. Her betyder[a-z]
faktisk " alle små bogstaver ". - I de fleste andre lokaliteter er store og små bogstaver grupperet sammen, dvs. rækkefølgen er
aAbBcC...xXyYzZ
. Her vil[a-z]
betyde " alle små bogstaver og alle store bogstaver undtagenZ
. - Behandlingen af ikke-ASCII-tegn som " umlauts " er endnu et problem.
Svar
Indsætter dette på https://regexr.com/ hjælper med at debugge bedre.
Du undslap ikke -
i området, da -
bruges til at specificere rækkevidde.
Gammel:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Rettelse:
cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/
[...]
. Dette betyder også, at[\.]
matcher en prik eller et tilbageslag.grep '[\]' <<<'\'
ellergrep -o '[\.]' <<<'123\.abc'