Как мне искать и заменять условие «ИЛИ»

#perl

#perl

Вопрос:

Это тривиальная проблема, но я надеюсь, что кто-нибудь сможет указать мне правильный способ сделать это. У меня есть строка «Грозы», которую я заменяю на «T / storms».

 s/Thunderstorms/T/Storms/gi
 

Так получилось, что «Грозы» иногда записываются как «Грозы». Вместо написания двух команд поиска и замены я ищу замену «Грозы» или «Грозы» на «T / Storms» в одной команде.

Ответ №1:

Вы можете использовать s* для сопоставления нуля или более пробелов:

 use warnings;
use strict;

while (<DATA>) {
    s{Thunders*storms}{T/Storms}gi;
    print;
}

__DATA__
Thunderstorms
Thunder Storms
Thunder storms
 

Выводит:

 T/Storms
T/Storms
T/Storms
 

Я использовал разные разделители для оператора подстановки ( s{}{} ), чтобы избежать экранирования / .

Ответ №2:

используйте | .

s/Thunderstorms|ThundersStorms/T/Storms/gi

пример кода:

 use strict;
use warnings;

my $str = 'Thunderstorms foo Thunder Storms bar';
$str =~ s/Thunderstorms|ThundersStorms/T/Storms/gi;
print $str;