Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Замена выражения


Автор: semnt 21.4.2006, 01:24
Вот такая трабла... Собираю чат... нужно осуществить замену выражения "/я" на Логин юзера...
Ну предположим? что этот логин: semnt
Нужно заменить:
"Привет! /я"
на
"Привет! semnt"

Но выражение: "При/явет" должно остаться без изменений. То есть замену нужно делать только если перед выражением "/я" стоит пробел, либо это начало строки и после выражения "/я" должен стоять пробел, либо это конец строки.

Всё вроде просто, но не работает(

<?
$str="/я /я /я";
echo $str;
echo "<br>";
$str=eregi_replace("(^| )(/я)($| )","\\1semnt\\3",$str);
echo $str;
echo "<br>";
?>

Выводит: "semnt /я semnt";
Первое и третье вхождение заменяет... а вот второе - ни в какую...(
Видимо в ядре при замене происходит смещение указателя в строке и второе вхождение он почему-то уже не видит...

Как быть?
Пасиба) 

Автор: Ciber SLasH 21.4.2006, 01:59
Код
$str= "/я /я /я";
echo preg_replace("#(^|\s+)/я\b#m", "$1semnt", $str);
 

Автор: semnt 21.4.2006, 03:03
на локальном нормально... на сервере (PHP Version 4.3.11) не работает...(  

Автор: Ciber SLasH 21.4.2006, 03:30
А если так:
Код
<?php
$html = <<< EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=utf-8'>
</head>

<body>
<pre>
EOD;
$str= "/я /я /я";
$html .= iconv('utf-8', 'cp1251', preg_replace("#(^|\s+)/я\b#mu", "$1semnt", $str));
$html .= <<< EOD
</pre>
</body>
</html>
EOD;
echo $html;
?>
 

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