29Jun

Az alapvető szabályos kifejezések használata a jobb kereséshez és az idő takarításához

click fraud protection

Akár Grep-szal keresett vagy olyan programokat nézett, amelyek képesek átnevezni a fájlokat az Ön számára, akkor valószínűleg azon töprengett, vajon könnyebb-e a munkájának elvégzése. Szerencsére létezik, és ezt "szabályos kifejezéseknek" nevezik.

( Comic from XKCD.com)

Mi a rendszeres kifejezések?

A rendszeres kifejezések olyan kifejezések, amelyeket nagyon konkrét módon formáztak, és amelyek sok különböző eredményre képesek. Más néven "regex" vagy "regexp" néven is ismertek, elsősorban keresési és fájlnevezési funkciókban használatosak. Egy regexet úgy lehet használni, mint egy képletet, hogy számos lehetséges kimenetet hozzon létre, amelyek mindegyikét keresik. Alternatív megoldásként megadhatja, hogy a fájlok csoportja hogyan legyen megnevezve egy regex megadásával, és a szoftvere fokozatosan továbbhaladhat a következő tervezett kimenetre.Így több mappát átnevezhet több mappában nagyon egyszerűen és hatékonyan, és túlmutathat egy egyszerű számozási rendszer korlátozásain.

instagram viewer

Mivel a szabályos kifejezések használata speciális szintaxisra támaszkodik, a programnak képesnek kell lennie az olvasásra és az elemzésre. Számos kötegelt fájl átnevezési program a Windows és az OS X számára támogatja a regexpeket, valamint a GREP többfelhasználós kereső eszközt( amelyet a Bash Scripting for Beginners Guide-ban) és az Awk parancssori eszköz * Nix számára. Emellett számos alternatív fájlkezelő, indító és keresőeszköz használja őket, és nagyon fontos helyük van a Perl és a Ruby programozási nyelveken. Más fejlesztői környezetek, mint a. NET, a Java és a Python, valamint a közeljövő C ++ 11, mindegyike normál könyvtárakat biztosít a szabályos kifejezések használatához. Ahogy el tudod képzelni, nagyon hasznosak lehetnek abban, ha minimalizálni szeretné a programba helyezett kód mennyiségét.

Megjegyzések az előléptető karakterekről

Mielőtt bemutatnánk a példákat, szeretnénk rámutatni valamire. A bash parancsértelmező és a grep parancs használatával megmutatjuk, hogyan kell alkalmazni a szabályos kifejezéseket. A probléma az, hogy néha speciális karaktereket akarunk átadni a grepnek, és a bash shell fogja értelmezni ezt a karaktert, mert a shell is használja. Ilyen körülmények között "el kell menekülnünk" ezeket a karaktereket. Ez zavaros lehet, mert a karakterek "elszabadulása" a regexpekben is megtörténik. Például, ha ezt grep-be szeretnénk tenni:

\ & lt;Az

-t ki kell cserélnünk a következőkkel:

\\\ &

Minden speciális karakter itt kap egy backslash. Alternatív megoldásként használhat egyéni idézeteket is:

'\ & lt;'

Egyetlen idézőjel a bash parancsra nem értelmezi, mi van benne. Bár ezeket a lépéseket meg kell tenni, hogy bemutathassuk Önnek, a programjai( különösen a GUI-alapúak) gyakran nem igénylik ezeket az extra lépéseket. A dolgok egyszerűbbé és egyszerűbbé tétele érdekében a tényleges szabályos kifejezést idézett szövegként kapja meg, és a parancssori képernyőképeken megjelenik a megszökött szintaxis.

Hogyan bővülnek?

A Regexps valóban tömör módja annak, hogy kifejezze a feltételeket, hogy a számítógép többféle opcióra bővíthesse azokat. Vessünk egy pillantást a következő példára:

tom [0123456789]

A szögletes zárójelek - [és] - mondják el az elemző motornak, hogy bármi legyen is benne, bármilyen ONE karakter használható.Bármi is van a zárójelben, karakterkészletnek hívják.

Szóval, ha volt egy hatalmas lista a bejegyzések és mi használta ezt a regex keresni, a következő kifejezések illeszkednek:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

és így tovább. Azonban a következő lista NEM lenne kiegyeztetve, így NEM tűnne fel az eredményekben:

  • paradicsom;a regex nem számít semmilyen betűt a "tom"
  • Tom után;a regex megkülönbözteti a kis- és nagybetűket!

Választhat, hogy egy adott periódusban( .) Keres, amely lehetővé teszi a megjelenő karaktereket, amíg létezik egy karakter.

Amint láthatja, az

. tom

-vel történő beolvasás nem hozta fel azokat a kifejezéseket, amelyeknek csak az elején volt "tom".Még a "zöld paradicsom" is bejött, mert a "tom" előtti tér karakterként számít, de a "tomF" kifejezésnek nem volt karaktere az elején, és így figyelmen kívül hagyták őket.

Megjegyzés: A Grep alapértelmezett viselkedése az egész szövegsor visszaadása, ha valamelyik rész megegyezik a regex-szel. Más programok ezt nem tehetik meg, és kikapcsolhatja a grep-et az "-o" jelzéssel.

A váltást egy csővel( |) is meg lehet adni, mint itt:

speciali( s | z) e

Ez mind megtalálja:

  • szakosodott
  • szakosodott

A grep parancs használatakor el kell menekülnünk a speciális karakterek( ,, és) a visszafordulókkal, valamint használja az '-E' jelzőt, hogy ez működjön, és elkerülje a csúnya hibákat.

Amint már említettük, ez azért van, mert meg kell mondanunk a bash shell-nak, hogy átadjuk ezeket a karaktereket a grepnek, és ne csináljunk semmit velük. Az '-E' jelző azt mondja a grep számára, hogy a zárójeleket és a csövet speciális karakterekként használja.

Kockázattal lehet keresni a szögletes zárójelek között és a készlet kezdetén található szalagkészlet használatával:

tom [^ F | 0-9]

Ha még grep-et és bash-et használsz, ne felejtsd el menekülniaz a cső!

A listában szereplő, de NEM feltűnő kifejezések a következők:

  • tom0
  • tom5
  • tom9
  • tomF

Ezek nem egyeztek a regex-szel.

Hogyan használhatom a környezeteket?

Gyakran határokon alapuló keresés. Néha csak olyan szavakat akarunk, amelyek egy szó elején, egy szó végén vagy egy kódsor végén jelennek meg. Ezt könnyedén elvégezhetjük a horgonyok használatával.

A vonalkód használata( a zárójelen kívül) lehetővé teszi egy vonal "kezdetének" kijelölését.

^ tom

A vonal végének megkereséséhez használja a dollárjelet.

tom $

Láthatjuk, hogy a keresési sztringünk ebben a helyzetben ELŐTT a horgony.

Olyan mérkőzések is szerepelhetnek, amelyek a szavak kezdetén vagy végén, nem egész sorokban jelennek meg.

\ & lt; tom

tom \ & gt;

Ahogyan a cikk elején említett megjegyzésben megemlítettük, el kell kerülnünk ezeket a különleges karaktereket, mert bash-et használunk. Alternatív megoldásként egyszeri idézeteket is használhat:

Az eredmények ugyanazok. Győződjön meg róla, hogy használsz egy idézetet, és nem kettős idézeteket.

További erőforrások a fejlett regexpsekhez

Itt csak a jéghegy csúcsát érjük el. A pénznemjelölő által kijelölt pénzt kereshet, és kereshet a három vagy több egyező kifejezés közül. A dolgok valóban bonyolultak. Ha többet szeretne megtudni a rendszeres kifejezésekről, kérjük, nézze meg a következő forrásokat.

  • A Zytrax.com néhány oldalt tartalmaz konkrét példákat arra, hogy a dolgok miért és hogyan nem egyeznek. Az
  • Regular-Expressions.info egy gyilkos útmutatót is tartalmaz sok fejlettebb dologhoz, valamint egy hasznos referenciaoldalhoz.
  • A Gnu.org-nak van egy oldala, amely a regexps grep használatával foglalkozik.

A RegExr nevű Flash-alapú online eszköz használatával is elkészítheti és kipróbálhatja szabályos kifejezéseit.Úgy működik, ahogy írsz, ingyenes, és a legtöbb böngészőben használható.

Van kedvenc használata a rendszeres kifejezésekhez? Tudja, hogy egy nagyszerű tételes átnevező, aki ezeket használja? Talán csak a grep-fu-jára vágysz. Hozzájárulj a gondolataidhoz kommentálva!