preg_replace ('/ σ /', 'ς', $ cat_name); - PullRequest
2 голосов
/ 16 июня 2010

как можно изменить только последнюю букву любого слова строки с регулярными выражениями?

Я использую mb_strtolower () для изменения строк с верхнего на нижний в греческом языке, и у меня проблемы с окончательными '.

Ответы [ 4 ]

3 голосов
/ 16 июня 2010

Используйте границы слова - \b - для соответствия начала или конца слова.Попробуйте

preg_replace ('/σ\b/', 'ς', $cat_name);
1 голос
/ 16 июня 2010
preg_replace (‘/σ\b/’, ‘ς’, $cat_name);
0 голосов
/ 16 июня 2010

код, который я использую: mb_internal_encoding ( "ISO-8859-7"); $ Cat_name = mb_strtolower ($ categories_name); $ cat_name = preg_replace ('/ σ \ b /', 'ς', $ cat_name);

Проблема в том, что когда я использую $ cat_name = preg_replace ('/ σ /', 'ς', $ cat_name); работать правильно и заменить каждый «σ» на «100»

Мой сервер имеет PHP 5.2.6-1 + lenny8 с Suhosin-Patch 0.9.6.2 (cli) (построено: 14 марта 2010 09:07:33)

Локально в моем ноутбуке я использую Xamp для Windows с версией PHP 5.3.1 и переключателем \ b. Так проблема в другой версии Php или в php.ini?

Спасибо за ответы ..

0 голосов
/ 16 июня 2010

РЕДАКТИРОВАТЬ2 :

mb_internal_encoding("UTF-8");
$s = "sdfΣ";
echo $s,"\n";
echo mb_ereg_replace("Σ\\b", 'ς', $s);

РЕДАКТИРОВАТЬ : Очевидно, это не работает для греческих букв, preg_replace будет соответствовать "f", а неsigma.

Не то, чтобы я знал какой-либо греческий, но σ помечен как "греческая строчная сигма", так что вы просите строчную версию, она все равно должна давать σ.

mb_strtolower() должно работать.Вы, вероятно, делаете что-то не так.Разместите соответствующую часть вашей программы.

В любом случае, с preg_replace и при условии, что ваш скрипт и $cat_name закодированы в UTF-8, это:

echo preg_replace ("/\\w\\b/eu", 'mb_strtolower(\'\\0\', \'UTF-8\')', $cat_name);

, например,если $cat_name == "sdfÉ", это дает sdfé.

...