Τι είναι μια ομάδα που δεν καταλαμβάνει τις κανονικές εκφράσεις;

Πώς χρησιμοποιούνται οι ομάδες που δεν δεσμεύουν, π.χ. (;:), στις κανονικές εκφράσεις και σε τι χρησιμεύουν;

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

Ένα παράδειγμα θα ήταν κάτι που ταιριάζει με μια διεύθυνση IP:

/(?:\d{1,3}\.){3}\d{1,3}/

Σημειώστε ότι δεν με νοιάζει να αποθηκεύσω τις πρώτες 3 οκτάδες, αλλά η ομαδοποίηση (;:...) μου επιτρέπει να συντομεύσω την regex χωρίς να επιβαρυνθώ με την επιβάρυνση της καταγραφής και αποθήκευσης μιας αντιστοιχίας.

Σχόλια (0)

Κάνει την ομάδα μη-καταγραφή, πράγμα που σημαίνει ότι η υποομάδα που ταιριάζει με αυτή την ομάδα δεν θα συμπεριληφθεί στη λίστα των καταγραφών. Ένα παράδειγμα σε ruby για να δείξουμε τη διαφορά:

"abc".match(/(.)(.)./).captures #=> ["a","b"]
"abc".match(/(?:.)(.)./).captures #=> ["b"]
Σχόλια (2)

Τις ομάδες που πιάνουν μπορείτε να τις χρησιμοποιήσετε αργότερα στην regex για να ταιριάξουν Ή μπορείτε να τις χρησιμοποιήσετε στο τμήμα αντικατάστασης της regex. Η δημιουργία μιας ομάδας που δεν καταλαμβάνει απλώς εξαιρεί την ομάδα αυτή από το να χρησιμοποιηθεί για έναν από τους δύο αυτούς λόγους.

Οι ομάδες που δεν καταγράφουν είναι εξαιρετικές αν προσπαθείτε να καταγράψετε πολλά διαφορετικά πράγματα και υπάρχουν κάποιες ομάδες που δεν θέλετε να καταγράψετε.

Αυτός είναι λίγο πολύ ο λόγος ύπαρξής τους. Ενώ μαθαίνετε για τις ομάδες, μάθετε για τις Ατομικές ομάδες, κάνουν πολλά! Υπάρχουν επίσης ομάδες lookaround, αλλά είναι λίγο πιο πολύπλοκες και δεν χρησιμοποιούνται τόσο πολύ.

Παράδειγμα χρήσης αργότερα στη regex (backreference):

]*>.*? [ βρίσκει μια ετικέτα xml (χωρίς υποστήριξη ns) ]

([A-Z][A-Z0-9]*) είναι μια ομάδα σύλληψης (σε αυτή την περίπτωση είναι το όνομα ετικέτας)

Αργότερα στο regex υπάρχει το \1 που σημαίνει ότι θα ταιριάξει μόνο το ίδιο κείμενο που ήταν στην πρώτη ομάδα (την ομάδα ([A-Z][A-Z0-9]*)) (σε αυτή την περίπτωση ταιριάζει με την ετικέτα τέλους).

Σχόλια (2)