Voitteko auttaa tässä regexissä sourceslist.nanorc
?
Regex:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Virhe:
Bad regex "cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/": Invalid range end
Kiitos.
Kommentit
- Ehkä sinun pitäisi välttää viiva (
-
): tämä voidaan tulkita alueeksi …
Vastaus
Ongelma on todennäköisesti -
-merkin sijoittaminen merkkiluetteloon.
Olet jo käyttänyt sitä, että merkkialueet voidaan ilmaista [start-end]
, kuten siinä, että [a-z]
on lyhenne sanoista [abcdefghijkl...xyz]
(vaikka katso varoitus alla). Tämä tarkoittaa, että -
on erikoismerkki ja jos se esiintyy kahden " säännöllisen " -merkkien, sen tulkitaan osoittavan vielä yhden alueen, joka käsittää nämä kaksi merkkiä ja kaikki välissä olevat.
Tämä toimii tietysti vain, jos merkin -
on leksikografisesti " myöhemmin " lajittelujärjestyksessä kuin sitä edeltävä merkki, mikä on myös syy virheilmoituksellesi ( huomaa, että se katoaa, jos sanot sen sijaan (-_
, vaikka se ei ratkaise ongelmaa ).
Koska haluat tietysti vastaamaan kirjaimellista -
ja sen mukaan, miten säännölliset lausekkeet tulkitaan .nanorc
, joko
- täytyy välttää se (ts.
\-
) tai - sijoittaa se ensimmäiseen tai viimeiseen merkkiin luettelo (ts.
[-etc]
tai[etc-]
), joka olisi vakiona POSIX- ja GNU-säännöllisissä lausekkeissa ja siksi todennäköisin ratkaisu Linux-järjestelmässä .
Katso esim. täällä lisätietoa varten.
Varoitus : Yllä oleva lauseke " [a-z]
on lyhenne sanoille [abcdefghijkl...xyz]
on ei ehdoitta totta ! Alueen tulkinta riippuu kieliasetuksista, erityisesti lajittelujärjestyksestä.
- " C " locale, järjestys on ASCII-koodiarvon mukainen, ts.
ABC...XYZ...abc...xyz
. Tässä[a-z]
tarkoittaa itse asiassa " kaikkia pieniä kirjaimia ". - Useimmissa muissa kielialueissa isot ja pienet kirjaimet ryhmitellään yhteen, ts. Järjestys on
aAbBcC...xXyYzZ
. Tässä[a-z]
tarkoittaisi " kaikkia pieniä ja suuria merkkejä paitsiZ
. - Muiden kuin ASCII-merkkien, kuten " umlauts ", käsittely on jälleen yksi asia.
Katso täältä ja täältä , jos haluat keskustella aiheesta lisää.
Vastaus
Tämän liittäminen osoitteeseen https://regexr.com/ auttaa virheenkorjausta paremmin.
Et välttynyt alueelta -
, koska -
käytetään määrittämään alue.
Vanha:
cdrom:\[[a-zA-Z0-9\._-\(\) ]+\]/
Korjaus:
cdrom:\[[a-zA-Z0-9\._\-\(\) ]+\]/
[...]
-ilmaisun sisällä. Tämä tarkoittaa myös, että[\.]
vastaa pistettä tai vinoviivaa.grep '[\]' <<<'\'
taigrep -o '[\.]' <<<'123\.abc'