2011-01-05 2 views
1

Я новичок в preg_replace - PHP и просто изучаю его сейчас ... Я хочу изменить определенный символ, только если его предыдущий и следующий символ имеет английские символы. т. е. целевой символ является частью слова, а не символом начала или конца.замена символа из середины слова строки

Для примера ...

$string = "I am learn*ing *PHP today*"; 

Я хочу, чтобы эта строка быть преобразована следующим образом.

$newString = "I am learn'ing *PHP today*"; 

ответ

2
$string = "I am learn*ing *PHP today*"; 
$newString = preg_replace('/(\w)\*(\w)/', '$1\'$2', $string); 

// $newString = "I am learn'ing *PHP today* " 

Это будет соответствовать звездочку окружении символов слова (буквы, цифры, символы подчеркивания). Если вы хотите сделать алфавитные символы вы можете сделать:

preg_replace('/([a-zA-Z])\*([a-zA-Z])/', '$1\'$2', 'I am learn*ing *PHP today*'); 
+0

Это заменяет только первое появление. Как насчет строки типа «Я изучаю» PHP в * день »; – Chandu

+0

Вы неверны, Кибернетические. Он заменяет все вхождения. – webbiedave

+0

Хотя, возможно, стоит упомянуть, как заменить только первый, поскольку пример OP заменяет только первый. – marcog

-1

Чтобы заменить только буквенные символы, вам нужно использовать [AZ] в качестве диапазона символов, и использовать флаг я, чтобы сделать регулярное выражение не чувствителен к регистру , Поскольку символ, который вы хотите заменить, - это звездочка, вам также нужно избежать его с помощью обратного слэша, потому что звездочка означает «совпадение нуля или более раз» в регулярном выражении.

$newstring = preg_replace('/([a-z])\*([a-z])/i', "$1'$2", $string); 
-1

Для замены всех мест где asteric в окружении письма ....

$ строка = preg_replace ('/ (\ ш) * (\ ш) /', '$ 1 \' $ 2' , $ строка);

И

Для замены всех мест где asteric где asteric является начало и конец символ слова ....

$ строка = preg_replace ('/ * (\ W +) * /',» \ '$ 1 \' ', $ string);

Смежные вопросы