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.