gpt4 book ai didi

php - 反转 "English"字造句

转载 作者:可可西里 更新时间:2023-10-31 22:39:48 29 4
gpt4 key购买 nike

我有一个字符串,其中可能使用了多种语言,例如:

این متن فارسی است and this is !!! in English
این خط بعدی است و this is going to be continued...

我只想反转英文单词,所以结果应该是这样的:

این متن فارسی است English in !!! is this and
این خط بعدی است و continued be to going is this...

对于要反转的文本,我得到:

public static function reverseEnglishWords($string)
{
return preg_replace_callback('/\w+/', function (array $m) { return strrev($m[0]); }, $string);
}

但它会反转所有字符。


编辑:这是目前最有效的方法:

<?php
$string = "
این یک تست جدید است
Is my English line working just fine?
I hope it does...
این یک جمله جدید است and this is to be continued in English...
";

$newStr = preg_replace_callback('/\w.*(?=\w|\b)/', function (array $m) {
return implode(" ", array_reverse(explode(" ", $m[0])));
}, $string);

echo $newStr;

唯一的问题是字符串 enf 中的某些字符,如 ?... 在上面的示例中放错了位置。当前结果是:

این یک تست جدید است
很好只是工作线英语我是?
是不是希望我...
اون یک جمله جدید است 英语继续是这个和...

应该是:

این یک تست جدید است
?很好只是工作线英语我是
……希望我
اون یک جمله جدید است ...英语继续是这个和

最佳答案

你可以使用

function reverseEnglishWords($string)
{
return preg_replace_callback('/(?!\s)[^\p{Arabic}\r\n]+/u', function ($m) {
$tmp = preg_replace_callback('~(\w+)([^\w\s]+)~', function($n) {
return strrev($n[2]) . $n[1];
}, $m[0]);
return implode(" ", array_reverse(
preg_split('~\s+~u', $tmp, -1, PREG_SPLIT_NO_EMPTY)
)
);
}, $string);
}

$s = "
این یک تست جدید است
Is my English line working just fine?
I hope it does...
Another one?!
این یک جمله جدید است and this is to be continued in English...
";

echo reverseEnglishWords($s);

查看 PHP demo 输出

این یک تست جدید است
?fine just working line English my Is
...does it hope I
!?one Another
این یک جمله جدید است ...English in continued be to is this and

这里,/(?!\s)[^\p{Arabic}\r\n]+/u 匹配一个或多个不属于阿拉伯文字且不是 CR 和 LF 的连续字符(以非空白字符开头)。匹配项被传递给 preg_replace_callback 匿名函数,其中首先使用另一个 preg_replace_callback 处理匹配项,以反转以字母开头并以标点符号结尾的单词中的字母和标点符号(参见 (\w+)([^\w\s]+)正则表达式),然后用任何类型的 Unicode 空格拆分,同时丢弃空项(参见 preg_split('~\s+~u', $m[0], -1, PREG_SPLIT_NO_EMPTY)), array_reverse 反转找到的“单词”数组,implode 用空格连接反转的项目。

关于php - 反转 "English"字造句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53516119/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com