Как заменить английские слова, чередующиеся с неанглийскими (UTF-8) словами

Как я могу сопоставить и заменить английские слова, чередующиеся с персидскими словами?

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

Поэтому мне нужно заменить английские слова на <span dir="ltr">word</span>.

Я думаю, что следующее может соответствовать латинским словам. Он также должен содержать некоторые символы (#, !, $, …). Также укажите выражение для замены

^[a-zA-Z]+( [a-zA-Z]+)*$

Для примера этот текст:

من قصد دارم این English# را عوض کنم به

Следует заменить на:

من قصد دارم این <span dir="ltr">English#</span> را عوض کنم به

person Ahmad    schedule 21.01.2014    source источник


Ответы (1)


Это решает проблему:

$pattern = "/([a-zA-Z]+[a-zA-Z?><;,{}[\]\-_+=!@#$%\^*|']*)/";
$replacement = '<span dir="ltr">${1}</span>';
$subject = preg_replace($pattern, $replacement, $subject);

Он соответствует английскому алфавиту плюс некоторые дополнительные символы, но обратите внимание, что вы не должны включать & в дополнительные символы, так как HTML-кодировка символов Unicode начинается с &.

person Ahmad    schedule 21.01.2014