1.18. Zastępowanie wielu wzorców w pojedynczym przebiegu

Problem

Chcemy wykonać kilka operacji typu „znajdź i zamień”, sterowanych oddzielnymi wyrażeniami regularnymi — równolegle, w pojedynczym przejściu przez łańcuch.

Rozwiązanie

Musimy użyć metody Regexp.union do zagregowania poszczególnych wyrażeń regularnych w pojedyncze wyrażenie, pasujące do każdego z wyrażeń cząstkowych. Zagregowane wyrażenie musimy następnie przekazać jako parametr metody String#gsub wraz z blokiem kodowym bazującym na obiekcie MatchData. Wiedząc, do którego z wyrażeń cząstkowych przyporządkować można znalezioną frazę, możemy wybrać odpowiednią frazę zastępującą:

class String def mgsub(key_value_pairs=[].freeze) regexp_fragments = key_value_pairs.collect { ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.