如何分隔字符串(阿拉伯字符串)



我有一个组合字符串,我想把它分开。

My Pattern: (阿拉伯语,从右开始):

str3[str2](str1)

示例1

输入:

string = تَ) [au:][مص] (مص .) راست کردن, معتدل کردن)

我想要输出:

$str1='(تَ)';
$str2='[ ع . ]';
$str3='مص م .) راست کردن ، معتدل کردن)';

示例2

输入:

字符串=اِتَ)(مصل)=اباته:شبرادرجاییگذراندن)

我想要输出:

$str1='(اِ تَ)';
$str2='';
$str3='مص ل .) = اباته : شب را در جایی گذراندن)';

示例3

输入:

string = [au:][مص] (مص .) راست کردن, معتدل کردن

我想要输出:

$str1='';
$str2='[ ع . ]';
$str3='(مص م .) راست کردن ، معتدل کردن';

我该怎么做呢?

正如我在评论中提到的,显然第一个字符(最右边)不是它应该是(实际上它是最后一个字符)的开括号,这个隐藏的错误导致误解(它只是视觉上正确)。但是,下面的代码纠正了错误并输出所需的字符串。

<?php
$arrStr = [
'تَ) [ ع . ] (مص م .) راست کردن ، معتدل کردن)',
'اِ تَ) (مص ل .) = اباته : شب را در جایی گذراندن)',
];
echo "<body style='direction: rtl !important;'>";
foreach($arrStr as $str) {
    preg_match('~(.*?))(?:s)([.*?])?(?:s*?)(.*)~', $str, $matches);
    $matches[1] = "(".$matches[1];
    $matches[3] = trim(substr($matches[3], 0, -1));
    echo "<pre>";
    for($i=1; $i<=3; $i++)
        echo "$i: {$matches[$i]}<br />";
    echo "</pre><hr>";
}
echo "</body>";
?>

输出:(请注意,条目在正确的RTL方向上,并且将在RTL环境中正确显示(它们不会在LTR环境中被伪造为正确))

1: (تَ)
2: [ ع . ]
3: (مص م .) راست کردن ، معتدل کردن
_____________________________________________
1: (اِ تَ)
2: 
3: (مص ل .) = اباته : شب را در جایی گذراندن
_____________________________________________


P。S:所以,这是你的新场景:()中包含的第一部分是可选的,[]中包含的第二部分也是可选的,但第三部分是强制性的;根据你上面的例子,第三部分也可能从(*)开始,因此,考虑B (A)的例子还有没有方法确定的例子的格式可选(A)其次是强制性的第三部分第一部分B,或格式没有任何可选的部分,但强制性的第三部分是整个字符串,如果这不是关心你可能使用~(.*?)s)?([.*?]s)?(.*)~作为正则表达式。

可以在unicode中匹配阿拉伯语(也包括波斯语)字符。下面是匹配(تَ)的代码:

$str = تَ) [ ع . ] (مص م .) راست کردن ، معتدل کردن);
preg_match('/^.*((u064Eu062A)).*$/iu', $str);

在上面的表达式中,u064E是元音fetHa(出现在前面),而u062A是辅音ta。u标志告诉PHP在unicode模式下操作

最新更新