如何替换与非英语(UTF-8)单词交错的英语单词

时间:2014-01-21 06:43:32

标签: php regex right-to-left non-english

如何匹配和替换与波斯语单词交错的英语单词?

波斯语字母不是拉丁语。问题是英语单词与波斯语单词交错(以从右到左书写)没有正确显示,除非它们被span包围,从而设置从左到右的方向。

因此,我需要用<span dir="ltr">word</span>替换英语单词。

我认为以下内容可以匹配拉丁文字。它也应包含一些符号(#!$,...)。另外,请提供替换

的表达式
^[a-zA-Z]+( [a-zA-Z]+)*$

举个例子,这个文字:

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

应替换为:

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

1 个答案:

答案 0 :(得分:8)

这解决了这个问题:

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

它匹配英文字母加上一些额外字符,但请注意,由于Unicode字符的HTML编码以&开头,因此不应在额外字符中包含&