Xpoint
   [напомнить пароль]

Простая регулярка на замену

Метки: [без меток]
2007-05-11 14:23:37 [обр] _fox_[досье]

Добрый день!
Помогите написать регулярку для замены текста содержащего слова доллара|долларов|доллар и цента|центов|цент
на соответсвенно доллара США | долларов США и тд.
Спасибо!

PS регулярные выражения изучаю недавно

спустя 30 минут [обр] Максим Головкин(0/18)[досье]
$string =~ s/((?:доллар|цент)(?:а|ов)?)/$1 США/g;
спустя 5 минут [обр] Максим Головкин(0/18)[досье]
а лучше
$string =~ s/\b((?:доллар|цент)(?:а|ов)?)/$1 США/g;
чтобы не получилось "33 доцента США"
спустя 14 минут [обр] Роман Чемисов(16/350)[досье]
_fox_[досье]
доллар и цента => доллара США и цента США?
спустя 27 секунд [обр] Евгений Петров(0/1055)[досье]
Максим Головкин[досье] А как же долларам, долларом, доллары и т.д.
спустя 1 час 37 минут [обр] kuglik[досье]

Может быть так?

$string =~ s/\b((?:доллар|цент)\S*)/$1 США/ig;

У меня почему-то граница слова \b не срабатывает на русские буквы. Тогда можно так:

$string =~ s/(^|\s)((?:доллар|цент)\S*)/$1$2 США/ig;
спустя 13 минут [обр] kuglik[досье]
Забыл про знаки препинания. Если после слова "доллар*" стоит знак препинания, то он останется привязан к нему, а " США" будет идти уже после него.
Вот так будет лучше
$string =~ s/(^|\s)((?:доллар|цент)[\wа-я]*)/$1$2 США/ig;
спустя 2 дня 21 час [обр] _fox_[досье]
а как сделать такую замену
"долл. США" на "$" ?
такое $cur=~ s/долл.\sСША/\$/g; не работает
спустя 20 минут [обр] kuglik[досье]
Маскировать обратным слэшем точку в выражении и знак доллара в подстановке.
спустя 6 минут [обр] kuglik[досье]
Извиняюсь, не заметил. Только точку, знак доллара уже маскирован.
спустя 6 минут [обр] Михаил Кюршин aka ya-ya(67/414)[досье]

_fox_[досье] у меня работает.

kuglik[досье] Экранирована точка или нет в данном случае не играет роли.

спустя 16 минут [обр] kuglik[досье]
Странно, у меня тоже работает. Может быть в исходном тексте не один пробельный символ? Тогда нужно \s+
спустя 13 минут [обр] _fox_[досье]
Уппппппс там в коде возвращалось оказывается не пробел, а &nbsp, я недосмотрел, ссорри :)
так что нада так
$cur=~ s/долл\.\ США/\$/g;
просто у меня нет доступа к исходникам модулям, а вывод в html нужно изменить...
вот еще проблема есть строка С&nbsp;<b>00<sup><u>00</u></sup>&nbsp;20.04.2007</b>&nbsp;по&nbsp;&nbsp;<b>24<sup><u>00</u></sup>&nbsp;19.04.2008</b>
надо выкинуть время, здесь это 00:00 и 24:00 сделал так
my $period = $anketa_insurance->get_PeriodPresentation(1,'С',1);
$period = ~ s/(0[0-9]|1[0-9]|2[01234])<sup><u>([0-5][0-9])<\/u><\/sup>//;
print $period;
печатается на экран 4294967295 :(
спустя 1 час 34 минуты [обр] kuglik[досье]

Какой-то дикий результат. А точно исходная строка та что нужна? Что выводит print $period; до преобразования?
Кроме того можно упростить выражение до

([0-1][0-9]|2[0-4])<sup><u>([0-5][0-9])<\/u><\/sup>

или, т.к. форматирование сложное и вряд ли встретится в другом контексте, даже

\d{2}<sup><u>\d{2}<\/u><\/sup>
спустя 4 минуты [обр] _fox_[досье]
print $period; до преобразования выводит именну ту строку которую я указал
С&nbsp;<b>00<sup><u>00</u></sup>&nbsp;20.04.2007</b>&nbsp;по&nbsp;&nbsp;<b>24<sup><u>00</u></sup>&nbsp;19.04.2008</b>
спустя 32 минуты [обр] arto(42/497)[досье]
"= ~" — пробел я операторе
спустя 14 часов [обр] _fox_[досье]
ёпрст! спасибо! да уж - Учиться учиться и еще раз учиться! ;-)
Powered by POEM™ Engine Copyright © 2002-2005