29Jun

Πώς να χρησιμοποιήσετε βασικές κανονικές εκφράσεις για καλύτερη αναζήτηση και εξοικονόμηση χρόνου

click fraud protection

Είτε έχετε ψάξει με το Grep είτε κοιτάζοντας προγράμματα που μπορούν να μετονομάσουν παρτίδες για εσάς, ίσως αναρωτηθήκατε αν υπήρχε ένας ευκολότερος τρόπος για να ολοκληρώσετε τη δουλειά σας.Ευτυχώς, υπάρχει και λέγεται "κανονικές εκφράσεις".

( Comic από XKCD.com)

Τι είναι οι Κανονικές εκφράσεις;

Οι κανονικές εκφράσεις είναι δηλώσεις μορφοποιημένες με πολύ συγκεκριμένο τρόπο και που μπορούν να αντέξουν σε πολλά διαφορετικά αποτελέσματα.Επίσης γνωστό ως "regex" ή "regexp", χρησιμοποιούνται κυρίως στις λειτουργίες ονομασίας αναζήτησης και αρχείων.Ένα regex μπορεί να χρησιμοποιηθεί σαν ένας τύπος για να δημιουργήσει μια σειρά από διαφορετικές πιθανές εξόδους, όλες οι οποίες αναζητούνται.Εναλλακτικά, μπορείτε να καθορίσετε τον τρόπο ονοματοδοσίας μιας ομάδας αρχείων, καθορίζοντας ένα regex και το λογισμικό σας μπορεί να μετακινηθεί σταδιακά στην επόμενη προβλεπόμενη έξοδο.Με αυτό τον τρόπο, μπορείτε να μετονομάσετε πολλά αρχεία σε πολλούς φακέλους πολύ εύκολα και αποτελεσματικά και μπορείτε να προχωρήσετε πέρα ​​από τους περιορισμούς ενός απλού συστήματος αρίθμησης.

instagram viewer

Επειδή η χρήση των κανονικών εκφράσεων βασίζεται σε μια ειδική σύνταξη, το πρόγραμμά σας πρέπει να είναι σε θέση να τα διαβάζει και να τα αναλύει.Πολλά προγράμματα μετονομασίας αρχείων παρτίδας για Windows και OS X έχουν υποστήριξη για τα regexps, καθώς και το εργαλείο αναζήτησης GREP( το οποίο περιγράψαμε στο Bash Scripting for Beginners Guide) και το εργαλείο γραμμής εντολών Awk για το * Nix.Επιπλέον, πολλοί εναλλακτικοί διαχειριστές αρχείων, εκτοξευτές και εργαλεία αναζήτησης τα χρησιμοποιούν και έχουν πολύ σημαντική θέση στις γλώσσες προγραμματισμού όπως το Perl και το Ruby.Άλλα περιβάλλοντα ανάπτυξης, όπως το. NET, Java και Python, καθώς και η επερχόμενη C ++ 11, παρέχουν όλες τις τυπικές βιβλιοθήκες για τη χρήση κανονικών εκφράσεων.Όπως μπορείτε να φανταστείτε, μπορεί να είναι πραγματικά χρήσιμο όταν προσπαθείτε να ελαχιστοποιήσετε το ποσό του κώδικα που βάζετε σε ένα πρόγραμμα.

Μια σημείωση σχετικά με τους χαρακτήρες που διαφεύγουν

Πριν σας δείξουμε με παραδείγματα, θα θέλαμε να επισημάνω κάτι.Θα χρησιμοποιήσουμε το κέλυφος bash και την εντολή grep για να σας δείξουμε πώς να εφαρμόζετε κανονικές εκφράσεις.Το πρόβλημα είναι ότι μερικές φορές θέλουμε να χρησιμοποιήσουμε ειδικούς χαρακτήρες που πρέπει να μεταβιβαστούν στο grep και το κέλυφος bash θα ερμηνεύσει αυτόν τον χαρακτήρα επειδή το κέλυφος το χρησιμοποιεί επίσης.Υπό αυτές τις συνθήκες, πρέπει να "ξεφύγουμε" από αυτούς τους χαρακτήρες.Αυτό μπορεί να προκαλέσει σύγχυση, επειδή αυτή η "διαφυγή" χαρακτήρων εμφανίζεται επίσης μέσα σε regexps.Για παράδειγμα, αν θέλουμε να εισέλθουμε σε grep:

\ & lt;

θα πρέπει να το αντικαταστήσουμε με:

\\\ & lt;

Κάθε ειδικός χαρακτήρας εδώ παίρνει μία ανάστροφη κάθετο.Εναλλακτικά, μπορείτε επίσης να χρησιμοποιήσετε μεμονωμένα εισαγωγικά:

'\ & ltd'

Ενιαία εισαγωγικά λένε bash ΔΕΝ να ερμηνεύσει τι είναι μέσα τους.Ενώ απαιτούμε να γίνουν αυτά τα βήματα, ώστε να μπορέσουμε να αποδείξουμε για σας, τα προγράμματά σας( ειδικά τα GUI) δεν απαιτούν συχνά αυτά τα επιπλέον βήματα.Για να διατηρήσετε τα πράγματα απλά και απλά, η πραγματική κανονική έκφραση θα σας δοθεί ως αναφερόμενο κείμενο και θα δείτε τη διαφυγή σύνταξης στα screenshots της γραμμής εντολών.

Πώς επεκτείνονται;Το

Regexps είναι ένας πολύ σύντομος τρόπος για να δηλώσετε όρους έτσι ώστε ο υπολογιστής σας να μπορεί να τα επεκτείνει σε πολλές επιλογές.Ας ρίξουμε μια ματιά στο ακόλουθο παράδειγμα:

tom [0123456789]

Οι αγκύλες - [και] - λένε στον μηχανισμό ανάλυσης ότι οτιδήποτε υπάρχει μέσα, οποιοσδήποτε χαρακτήρας μπορεί να χρησιμοποιηθεί για να ταιριάξει.Οτιδήποτε βρίσκεται μέσα σε αυτές τις αγκύλες ονομάζεται σετ χαρακτήρων.

Έτσι, εάν είχαμε ένα τεράστιο κατάλογο εγγραφών και χρησιμοποιήσαμε αυτό το regex για αναζήτηση, οι ακόλουθοι όροι θα αντιστοιχούσαν:

  • tom
  • tom0
  • tom1
  • tom2
  • tom3

και ούτω καθεξής.Ωστόσο, η ακόλουθη λίστα δεν θα ταιριάζει, και έτσι δεν θα εμφανιστεί στα αποτελέσματά σας: ντομάτα

  • ?το regex δεν λαμβάνει υπόψη τα γράμματα μετά το "tom"
  • Tom;στο regex γίνεται διάκριση πεζών-κεφαλαίων!

Μπορείτε επίσης να επιλέξετε να κάνετε αναζήτηση με ένα χρονικό διάστημα( .) Το οποίο θα επιτρέπει οποιονδήποτε χαρακτήρα, εφόσον υπάρχει ένας χαρακτήρας.

Όπως βλέπετε, το

. com

δεν έφερε όρους που είχαν μόνο "tom" στην αρχή.Ακόμα και οι «πράσινες ντομάτες» ήρθαν, επειδή ο χώρος πριν από το «tom» μετράει ως χαρακτήρας, αλλά οι όροι "tomF" δεν είχαν χαρακτήρα στην αρχή και έτσι αγνοήθηκαν.

Σημείωση: Η προεπιλεγμένη συμπεριφορά του Grep είναι να επιστρέψει ολόκληρη τη γραμμή κειμένου όταν κάποιο τμήμα ταιριάζει με το regex.Άλλα προγράμματα μπορεί να μην το κάνουν και μπορείτε να το απενεργοποιήσετε με grep με τη σημαία '-o'.

Μπορείτε επίσης να ορίσετε εναλλαγή χρησιμοποιώντας ένα σωλήνα( |), όπως εδώ:

speciali( s | z) e

Αυτό θα βρει και τα δύο:

  • ειδικεύονται
  • ειδικεύονται

Όταν χρησιμοποιείτε την εντολή grep πρέπει να ξεφύγουμε από τους ειδικούς χαρακτήρες|, και) με πλάγιες λέξεις-κλειδιά καθώς και τη σημαία «-E» για να αποφύγετε την άσχημη λάθος.

Όπως αναφέρθηκε παραπάνω, αυτό οφείλεται στο γεγονός ότι πρέπει να πούμε στο κέλυφος bash να περάσει αυτούς τους χαρακτήρες στο grep και να μην κάνει τίποτα μαζί τους.Η σημαία '-E' λέει στο grep να χρησιμοποιεί τις παρενθέσεις και τους σωλήνες ως ειδικούς χαρακτήρες.

Μπορείτε να αναζητήσετε με αποκλεισμό χρησιμοποιώντας μια αγκίστρωση που βρίσκεται μέσα στις αγκύλες σας και στην αρχή ενός συνόλου:

tom [^ F | 0-9]

Και πάλι, αν χρησιμοποιείτε grep και bash, θυμηθείτε να ξεφύγετεεκείνο το σωλήνα!

Όροι που ήταν στη λίστα αλλά δεν εμφανίστηκαν είναι:

  • tom0
  • tom5
  • tom9
  • tomF

Αυτοί δεν συμπίπτουν με το regex μας.

Πώς μπορώ να χρησιμοποιήσω περιβάλλοντα;

Συχνά ψάχνουμε με βάση τα όρια.Μερικές φορές θέλουμε μόνο τις συμβολοσειρές που εμφανίζονται στην αρχή μιας λέξης, στο τέλος μιας λέξης ή στο τέλος μιας γραμμής κώδικα.Αυτό μπορεί εύκολα να γίνει χρησιμοποιώντας αυτό που ονομάζουμε άγκυρες.

Χρησιμοποιώντας μια κρέμα( εκτός των παρενθέσεων) σας επιτρέπει να ορίσετε την "αρχή" μιας γραμμής.

^ tom

Για να αναζητήσετε το τέλος μιας γραμμής, χρησιμοποιήστε το σύμβολο του δολαρίου.

tom $

Μπορείτε να δείτε ότι η συμβολοσειρά αναζήτησης έρχεται ΠΡΙΝ την άγκυρα σε αυτή την περίπτωση.

Μπορείτε επίσης να χρησιμοποιήσετε τους αγώνες που εμφανίζονται στην αρχή ή στο τέλος των λέξεων, όχι ολόκληρες γραμμές.

& lt; tom

tom \ & gt;

Όπως αναφέρθηκε στη σημείωση στην αρχή αυτού του άρθρου, πρέπει να ξεφύγουμε από αυτούς τους ειδικούς χαρακτήρες επειδή χρησιμοποιούμε bash.Εναλλακτικά, μπορείτε επίσης να χρησιμοποιήσετε μεμονωμένα εισαγωγικά:

Τα αποτελέσματα είναι τα ίδια.Βεβαιωθείτε ότι χρησιμοποιείτε μόνο αποσπάσματα και όχι διπλά εισαγωγικά.

Άλλοι πόροι για Advanced Regexps

Έχουμε χτυπήσει μόνο την άκρη του παγόβουνου εδώ.Μπορείτε επίσης να αναζητήσετε όρους χρημάτων οριοθετημένους από τον δείκτη νομίσματος και να αναζητήσετε τρεις ή περισσότερους όρους αντιστοίχισης.Τα πράγματα μπορούν να γίνουν πολύ περίπλοκα.Εάν ενδιαφέρεστε να μάθετε περισσότερα σχετικά με τις κανονικές εκφράσεις, παρακαλούμε να ρίξετε μια ματιά στις παρακάτω πηγές.

  • Το Zytrax.com έχει μερικές σελίδες με συγκεκριμένα παραδείγματα γιατί τα πράγματα δεν συμβαίνουν και δεν ταιριάζουν.Το
  • Regular-Expressions.info έχει επίσης έναν οδηγό δολοφόνος σε πολλά πιο προηγμένα πράγματα, καθώς και μια εύχρηστη σελίδα αναφοράς.
  • Η Gnu.org έχει μια σελίδα αφιερωμένη στη χρήση regexps με grep.

Μπορείτε επίσης να δημιουργήσετε και να δοκιμάσετε τις κανονικές εκφράσεις σας χρησιμοποιώντας ένα δωρεάν online εργαλείο Flash που ονομάζεται RegExr.Λειτουργεί όπως πληκτρολογείτε, είναι δωρεάν και μπορεί να χρησιμοποιηθεί στα περισσότερα προγράμματα περιήγησης.

Έχετε μια αγαπημένη χρήση για κανονικές εκφράσεις;Γνωρίζετε ένα μεγάλο barn renamer που τις χρησιμοποιεί;Ίσως θέλετε απλώς να καυχηθείτε για το grep-fu σας.Συμβάλλετε στις σκέψεις σας σχολιάζοντας!