Kan du hjelpe med denne regexen i sourceslist.nanorc
?
Regex:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Feil:
Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end
Takk.
Kommentarer
Svar
Problemet er sannsynligvis plasseringen av -
-tegnet i tegnlisten din.
Du har allerede brukt det faktum at rekkevidden av tegn kan uttrykkes ved at [start-end]
, som i [a-z]
som forkortelse for [abcdefghijkl...xyz]
(skjønt se advarselen nedenfor). Det betyr at -
er et spesialtegn, og hvis det forekommer mellom to " vanlig " tegn, tolkes det slik at det indikerer enda et område som omfatter disse to tegnene og alle i mellom.
Dette fungerer selvfølgelig bare hvis tegnet etter -
er leksikografisk " senere " i sorteringsrekkefølgen og deretter tegnet foran det, som også er årsaken til feilmeldingen din (du vil se at det forsvinner hvis du sier (-_
i stedet, selv om det ikke løser problemet ditt ).
Siden du åpenbart vil ha for å matche det bokstavelige -
, og avhengig av hvordan vanlige uttrykk tolkes i .nanorc
, du enten
- må unnslippe den (dvs.
\-
), eller - plasser den først eller sist i tegnet liste (dvs.
[-etc]
eller[etc-]
) som ville være standard i POSIX og GNU regulære uttrykk den mest sannsynlige løsningen på et Linux-system .
Se f.eks. her for nærmere referanse.
Advarsel : Uttalelsen ovenfor " [a-z]
å være stenografi for [abcdefghijkl...xyz]
er ikke ubetinget sant ! Hvordan rekkevidden tolkes, avhenger av lokalinnstillingene, spesielt sorteringsrekkefølgen.
- I " C " locale, er rekkefølgen i henhold til ASCII-kodeverdi, dvs.
ABC...XYZ...abc...xyz
. Her betyr[a-z]
faktisk " alle små bokstaver ". - I de fleste andre lokaler er store og små bokstaver gruppert sammen, dvs. at rekkefølgen er
aAbBcC...xXyYzZ
. Her vil[a-z]
bety " alle små bokstaver og alle store bokstaver unntattZ
. - Behandlingen av ikke-ASCII-tegn som " umlauts " er enda et problem.
Svar
Limer dette inn på https://regexr.com/ hjelper med å feilsøke bedre.
Du slapp ikke -
i området, da -
brukes til å spesifisere rekkevidde.
Gammel:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Retting:
cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/
Kommentarer
- Takk for lenken
- Å unnslippe en bindestrek i et parentesuttrykk hjelper ikke. Vær oppmerksom på at tilbakeslag ikke har noen spesiell betydning for uttrykket i
[...]
. Dette betyr også at[\.]
samsvarer med en prikk eller et tilbakeslag. - Virkelig? Jeg tviler. For å matche skråstrek, må du unnslippe den to ganger \\ for å matche den
- @JamesJohn Prøv f.eks.
grep '[\]' <<<'\'
, ellergrep -o '[\.]' <<<'123\.abc'
- Lim problemet inn i grep og se feilen, og bruk deretter min løsning for å fikse det
-
): dette kan tolkes som et område …