boli položené podobné otázky, ale chýba im jedna vec, ktorú musím urobiť, a ja to nedokážem zistiť.
Musím nájsť všetky súbory, ktoré NIE SÚrozšírenie tif alebo tiff, ale musím nájsť všetky ostatné, vrátane tých, ktoré nemajú rozšírenie. Mám prvú časť, ktorá pracuje s regexom nižšie, ale toto nezodpovedá súborom bez prípony.
^(.+).(?!tif$|tiff$).+$
Funguje to skvele, ale potrebujem nasledujúce.
filename.ext MATCH
filename.abc MATCH
filename.tif FAIL
filename MATCH
Vďaka :)
odpovede:
1 pre odpoveď č. 1Ak nepracujete s regulárnym jazykom JS / ECMAscript, môžete použiť:
^.*(?<!.tif)(?<!.tiff)$
0 pre odpoveď č. 2
Skôr než písať negatívny regulárny výraz, zvážte použitie jednoduchšieho a pozitívneho regulárneho výrazu, ale ak niečo urobíte, podniknite kroky nie zápas. Toto je často vynikajúci prístup.
Nemôže byť použitý v každej situácii (napr. Ak používate nástroj príkazového riadku, ktorý vyžaduje, aby ste špecifikovali čo robí ), ale urobil by som to tam, kde je to možné.
0 pre odpoveď č. 3
Toto funguje pre mňa:
^(?:(.+.)((?!tif$|tiff$)[^.]*)|[^.]+)$
Regex je rozdelený na dve rôzne časti:
Časť 1: (.+).((?!tif$|tiff$)[^.]*)
(.+)
(1. zachytávacia skupina) Priraďte názov súboru (prípadne obsahujúci bodky).
Zhoda s poslednou bodkou reťazca (pred príponou).((?!tif$|tiff$)[^.]*)
(2. zachytávacia skupina) Potom skontrolujte, či je bodka nie nasledovaný presne "tif"alebo"hašterenie“a ak áno, zodpovedajú rozšíreniu.
Časť 2: [^.]+
Ak sa časť 1 nezhoduje, skontrolujte, či máte iba názov súboru, ktorý neobsahuje bodku.
0 pre odpoveď č. 4
Ak máte v textovom súbore nejaké reťazce (ktorý má nový riadok):
perl -lne "/(?:tiff?)/ || print" file
Ak máte nejaké súbory v adresári:
ls | perl -lne "/(?:tiff?)/ || print"
Screen-shot:
0 pre odpoveď č. 5
Tu som uviedol:
^[^.s]+(.|s)(?!tiff?)
vysvetlenie:
Začiatok riadka na bodku alebo medzeru, dajte okolo toho svoju zodpovedajúcu skupinu, tj:
^(?<result>[^.s]+)
Potom bude hľadať bodku alebo medzeru s negatívnym hľadáčikom na tiffe (tiff? Bude zodpovedať tif aj tiff).
To predpokladá, že za názvom súboru bude vždy bodka alebo medzera. Toto môžete zmeniť na koniec riadku, ak to potrebujete:
^[^.s]+(.(?!tiff?)|n) linux
^[^.s]+(.(?!tiff?)|rn) windows