Βαθμωτά και συμβολοσειρές

rindex#

Βρίσκει τη θέση της τελευταίας εμφάνισης μιας υποσυμβολοσειράς μέσα σε μια συμβολοσειρά.

Η rindex είναι το αντίστοιχο της index από δεξιά προς τα αριστερά. Σαρώνει τη STR για τη SUBSTR και επιστρέφει το offset με βάση το μηδέν της δεξιότερης αντιστοιχίας, ή -1 αν δεν υπάρχει αντιστοιχία. Όταν δίνεται POSITION, η αναζήτηση περιορίζεται σε αντιστοιχίες των οποίων το offset εκκίνησης είναι μικρότερο ή ίσο της POSITION - δηλαδή, η τελευταία εμφάνιση σε αυτή τη θέση ή πριν από αυτήν.

Σύνοψη#

rindex $str, $substr
rindex $str, $substr, $position

Τι επιστρέφεται#

Έναν ακέραιο. Μηδέν ή θετικό σημαίνει το offset με βάση το μηδέν της δεξιότερης αντιστοιχίας· -1 σημαίνει ότι η SUBSTR δεν εμφανίζεται στη STR (υποκείμενο στον περιορισμό POSITION, αν υπάρχει).

Τα offsets μετρώνται σε χαρακτήρες όταν η STR περιέχει συμβολοσειρά χαρακτήρων, και σε bytes όταν η STR είναι συμβολοσειρά bytes. Αυτό ταιριάζει με την index και τις υπόλοιπες ενσωματωμένες συναρτήσεις συμβολοσειρών της Perl - η μονάδα είναι ό,τι χρησιμοποιεί η ίδια η συμβολοσειρά.

Παραδείγματα#

Βασική αναζήτηση από δεξιά προς τα αριστερά:

rindex("banana", "a");         # 5  (the final 'a')
rindex("banana", "na");        # 4  (last "na")
rindex("banana", "z");         # -1 (not found)

Βηματισμός προς τα πίσω σε κάθε εμφάνιση χρησιμοποιώντας κάθε αποτέλεσμα, μείον ένα, ως την επόμενη POSITION:

my $str = "banana";
my $pos = length($str);
while ((my $hit = rindex($str, "a", $pos - 1)) >= 0) {
    print "match at $hit\n";   # 5, 3, 1
    $pos = $hit;
}

Η POSITION ως άνω φράγμα - η αντιστοιχία πρέπει να ξεκινά σε αυτή τη θέση ή πριν από αυτήν:

rindex("banana", "na", 3);     # 4? No: 4 > 3, so the match at 4
                               #   is excluded; returns 2
rindex("banana", "na", 4);     # 4  (match starting at 4 is allowed)

Η κενή SUBSTR ταιριάζει σε κάθε offset, οπότε το αποτέλεσμα είναι η περικομμένη θέση:

rindex("banana", "", 4);       # 4
rindex("banana", "");          # 6  (length of "banana")

Συνδυασμός με την index για τον εντοπισμό του τελευταίου τμήματος μιας οριοθετημένης συμβολοσειράς - συνηθισμένο ιδίωμα για την απομόνωση τελικής επέκτασης ή συστατικού διαδρομής:

my $path = "/usr/local/bin/perl";
my $slash = rindex($path, "/");
my $file  = substr($path, $slash + 1);   # "perl"

Οριακές περιπτώσεις#

  • Υποσυμβολοσειρά μεγαλύτερη από συμβολοσειρά: η rindex("abc", "abcd") επιστρέφει -1. Καμία αντιστοιχία δεν μπορεί να χωρέσει.

  • Υποσυμβολοσειρά ίση με τη συμβολοσειρά: η rindex("abc", "abc") επιστρέφει 0. Η τελευταία (και μοναδική) αντιστοιχία ξεκινά στο offset 0.

  • Η POSITION πέρα από το τέλος: η rindex($str, $sub, 9999) συμπεριφέρεται σαν η POSITION να ήταν length($str) - σαρώνεται ολόκληρη η συμβολοσειρά.

  • Η POSITION είναι αρνητική: αντιμετωπίζεται ως 0. Η rindex("abc", "b", -5) επιστρέφει -1 (καμία αντιστοιχία δεν μπορεί να ξεκινήσει στο offset 0 ή νωρίτερα)· η rindex("abc", "a", -5) επιστρέφει 0.

  • Η POSITION είναι undef: το ίδιο με την παράλειψή της. Υπό use warnings αυτό εκπέμπει προειδοποίηση uninitialized.

  • Κενή STR, μη κενή SUBSTR: επιστρέφει -1.

  • Κενή STR, κενή SUBSTR: επιστρέφει 0.

  • Unicode: για συμβολοσειρές χαρακτήρων (αυτές που ο διερμηνέας γνωρίζει ότι είναι κείμενο), τα offsets μετρούν χαρακτήρες, όχι bytes. Μια συμβολοσειρά μεταβεβλημένη σε σημασιολογία bytes μέσω use bytes ή encode_utf8 θα αναφέρει offsets bytes αντί γι” αυτό. Ο κανόνας αντικατοπτρίζει τις index και substr.

  • Tainted ορίσματα: το αποτέλεσμα κληρονομεί taint από τις STR και SUBSTR υπό -T.

Διαφορές από το upstream#

Πλήρως συμβατό με το upstream Perl 5.42.

Δείτε επίσης#

  • index - το αντίστοιχο από αριστερά προς τα δεξιά· πανομοιότυπες συμβάσεις ορισμάτων, επιστρέφει την πρώτη εμφάνιση

  • substr - τυπικά η επόμενη κλήση μετά από επιτυχημένη rindex, για να φετάρει την αντιστοιχισμένη περιοχή ή ό,τι ακολουθεί

  • length - χρήσιμη κατά τον υπολογισμό της ουραίας φέτας: substr($s, $hit + length($sub))

  • pos - για σάρωση οδηγούμενη από regex όπου χρειάζεστε την κατάσταση αντιστοιχίας της μηχανής αντί για ένα μοναδικό offset υποσυμβολοσειράς

  • split - όταν θέλετε κάθε τμήμα οριοθετημένο από τη SUBSTR, όχι μόνο το τελευταίο

  • reverse - σε συνδυασμό με την index θεωρείται μερικές φορές κατά λάθος υποκατάστατο της rindex· η rindex είναι σαφέστερη και γρηγορότερη