Tudna segíteni ebben a regexben a sourceslist.nanorc
?
Regex:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Hiba:
Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end
Köszönöm.
Megjegyzések
Válasz
Valószínűleg a probléma az -
jel elhelyezése a karakterlistában.
Már használta azt a tényt, hogy a karaktertartományok kifejezhetők [start-end]
-vel, ahogyan a [a-z]
is rövidítésként szerepel a [abcdefghijkl...xyz]
(bár lásd az alábbi figyelmeztetést). Ez azt jelenti, hogy a -
speciális karakter, és ha két " rendszeres " karakterek, úgy értelmezzük, hogy egy újabb tartományt jelöl, amely magában foglalja ezt a két karaktert, és mindegyiket a kettő között.
Természetesen ez csak akkor működik, ha a karakter a A div> lexikográfiailag " később " rendezési sorrendben, majd az azt megelőző karakteren, ami szintén a hibaüzenet oka (Ön látni fogja, hogy elmúlik, ha ehelyett (-_
-t mondasz, bár ez nem oldja meg a problémádat ).
Mivel nyilvánvalóan szeretnéd a szó szerinti -
és attól függően, hogy a rendszeres kifejezéseket hogyan értelmezik a .nanorc
ben, akkor
- el kell kerülnie (azaz
\-
), vagy - az első vagy utolsó helyre kell tenni a karaktert lista (azaz
[-etc]
vagy[etc-]
), amely szabványos lenne a POSIX és a GNU reguláris kifejezéseiben , ezért a legvalószínűbb megoldás egy Linux rendszeren .
Lásd pl. itt további információkért.
Figyelmeztetés : A " [a-z]
fenti állítás, amely a [abcdefghijkl...xyz]
rövidítése, nem feltétel nélkül igaz ! A tartomány értelmezése a területi beállításoktól, különösképpen a rendezés sorrendjétől függ.
- A " C " locale, a sorrend az ASCII kódértéknek felel meg, azaz
ABC...XYZ...abc...xyz
. Itt a[a-z]
valójában azt jelenti, hogy " az összes kisbetű ". - A legtöbb más nyelvterületen a kis- és nagybetűk együtt vannak csoportosítva, azaz a sorrend
aAbBcC...xXyYzZ
. Itt a[a-z]
" minden kis- és nagybetűs karaktert jelentene, kivéveZ
. / li> - A nem ASCII karakterek, például a " umlauts " kezelése még egy kérdés.
Válasz
Ennek beillesztése ide: https://regexr.com/ jobban segíti a hibakeresést.
Nem került el a -
elől a tartományban, mint a -
a tartomány megadására szolgál.
Régi:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Javítás:
cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/
megjegyzések
- köszönöm a linket
- a zárójeles kifejezésben egy kötőjel elhagyása nem segít. Ne feledje, hogy a visszavágásnak nincs különösebb jelentése a
[...]
belső kifejezésben. Ez azt is jelenti, hogy a[\.]
pont vagy visszavágás illeszkedik. - Tényleg? Kétlem. Ahhoz, hogy megfeleljen az elővágásnak, kétszer kell elkerülnie \\ ahhoz, hogy megfeleljen
- @JamesJohn
grep '[\]' <<<'\'
, vagygrep -o '[\.]' <<<'123\.abc'
- Illessze be a problémát a grep-be, és tekintse meg a hibát, majd alkalmazza a javításomat a javításhoz
-
): ez tartományként értelmezhető …