#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;