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

  • Talán el kellene kerülnie a kötőjelet (-): ez tartományként értelmezhető …

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éve Z. / li>
  • A nem ASCII karakterek, például a " umlauts " kezelése még egy kérdés.

Lásd itt és itt további beszélgetéseket a témáról.

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 '[\]' <<<'\', vagy grep -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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük