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

Ahm*_*mad 5 php regex non-english right-to-left

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

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

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

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

^[a-zA-Z]+( [a-zA-Z]+)*$
Run Code Online (Sandbox Code Playgroud)

举个例子,这个文字:

?? ??? ???? ??? English# ?? ??? ??? ??
Run Code Online (Sandbox Code Playgroud)

应该替换为:

?? ??? ???? ??? <span dir="ltr">English#</span> ?? ??? ??? ??
Run Code Online (Sandbox Code Playgroud)

Ahm*_*mad 8

这解决了这个问题:

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

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