Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Регулярные выражения > Замена по шаблону в строке, имеющей "|" символ


Автор: spinel 30.4.2010, 12:55
простой пример

Код

$title = "yahaha 2004 | 34";

$p="2004 | 34";

$title =~ s/$p/5/;


Требуется заменить в строке $title  часть "2004 | 34" на произвольную строку.

Вышеприведенный код отдает вот что:
Код

yahaha 5| 34


ставим в щаблон обратный слеш в надежде, что | не будет расцениваться как "или" : 
Код

$p="2004 \| 34";


получаем тоже самое.


Есть идеи?


Автор: amg 30.4.2010, 13:30
Цитата(spinel @  30.4.2010,  12:55 Найти цитируемый пост)
$p="2004 \| 34";
$p='2004 \| 34';

Автор: spinel 30.4.2010, 13:49
во, спасиб...а если эта $p не заранее определена, а вычисляется?

$p=~s/\|/\\|/; не помогает


спасибо

Автор: shamber 30.4.2010, 13:58
$p=~s/\|/\\|/

Это что значит?

Автор: amg 30.4.2010, 14:56
Цитата(spinel @  30.4.2010,  13:49 Найти цитируемый пост)
$p=~s/\|/\\|/; не помогает
Странно. Должно работать. Или в общем случае
$p =~ s/(\W)/\\$1/g;

Автор: Pfailed 30.4.2010, 20:47
Можно еще всё заключить в \Q\E дабы не было проблем со спец символами:
$title =~ s/\Q$p\E/5/;

Автор: Logo 30.4.2010, 20:49
quotemeta

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)