php

12 3
M
На сайте с 20.08.2004
Offline
376
1338

<?

$txt = "В этом тесте слово извени надо писать с буквой и. А fff должно стать bbb";

echo $txt."<br>";

$txt = preg_replace("#\bизвени\b#i", "извини", $txt);

echo $txt."<br>";

$txt = preg_replace("#\b(fff)\b#i", "bbb", $txt);

echo $txt."<br>";

?>

кодировка windows1251

вторая замена не отрабатывается когда стоят модификатор \b

отец сыночка, лапочки дочки и еще одного сыночка
fliger
На сайте с 17.09.2015
Offline
106
#1
Miracle:
кодировка windows1251
вторая замена не отрабатывается когда стоят модификатор \b

\b - это граница слова из латинских символов

M
На сайте с 20.08.2004
Offline
376
#2
fliger:
\b - это граница слова из латинских символов

нигде не встречал что \b граница слова ЛАТИНСКИХ символов.

fliger
На сайте с 17.09.2015
Offline
106
#3
Miracle:
нигде не встречал что \b граница слова ЛАТИНСКИХ символов.

\b - граница между \w и \W

\w - это _0-9a-z

\W может включать в том числе символы кирилицы

Изучайте матчасть.

M
На сайте с 20.08.2004
Offline
376
#4

Хорошо, но как решить данную проблему?

fliger
На сайте с 17.09.2015
Offline
106
#5

$txt = preg_replace('/([^а-я])?(и)звени/i', '$1$2звини', $txt);

M
На сайте с 20.08.2004
Offline
376
#6

Спасибо, но такая замена заменит все что надо и не надо.

Например, бля в слове употреблять, бляха, вобля

[umka]
На сайте с 25.05.2008
Offline
456
#7

Проблему решит

setlocale(LC_CTYPE,"ru_RU.CP1251");


В этом тесте слово извени надо писать с буквой и. А fff должно стать bbb
В этом тесте слово извини надо писать с буквой и. А fff должно стать bbb
В этом тесте слово извини надо писать с буквой и. А bbb должно стать bbb
Лог в помощь!
Дмитрий
На сайте с 23.08.2006
Offline
199
#8

Можно попробовать через утверждения

<?php

$txt = 'бля употреблять бляху бля вобля бля';
$txt = preg_replace('/(?:(?<=[^а-я])|^)бля(?=(?:[^а-я]|$))/iuU', 'пип', $txt);
var_dump($txt);

результат:


$ php test.php
string(65) "пип употреблять бляху пип вобля пип"
Разрабатываю и автоматизирую на php http://jonnyb.ru/
M
На сайте с 20.08.2004
Offline
376
#9
[umka:
;15524304]setlocale(LC_CTYPE,"ru_RU.CP1251");

Пробовал установить, изменений не было, не знаю почему у вас сработало. спасибо

---------- Добавлено 18.03.2018 в 10:18 ----------

JonnyB:
Можно попробовать через утверждения

спасибо. интересно.

---------- Добавлено 18.03.2018 в 10:19 ----------

JonnyB:
uU

такое точно не зработает, когда стоит u выдает ошибку... тоже ранее пробовал.

Дмитрий
На сайте с 23.08.2006
Offline
199
#10

Ну уберите u, у меня просто utf-8

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий