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

Sha*_*deh 13 php regex string

我有一个我要分开的组合字符串.

我的模式:(阿拉伯语,从右侧开始):

str3[str2](str1)
Run Code Online (Sandbox Code Playgroud)

例1

输入:

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

我想要输出:

$str1='(??)';
$str2='[ ? . ]';
$str3='?? ? .) ???? ???? ? ????? ????)';
Run Code Online (Sandbox Code Playgroud)

例2

输入:

string =اÊ)(مصل.)=اباته:شبرادرجاییگذراندن)

我想要输出:

$str1='(?? ??)';
$str2='';
$str3='?? ? .) = ????? : ?? ?? ?? ???? ???????)';
Run Code Online (Sandbox Code Playgroud)

例3

输入:

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

我想要输出:

$str1='';
$str2='[ ? . ]';
$str3='(?? ? .) ???? ???? ? ????? ????';
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

som*_*One 5

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

<?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>";
?>
Run Code Online (Sandbox Code Playgroud)

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

1: (??)
2: [ ? . ]
3: (?? ? .) ???? ???? ? ????? ????
_____________________________________________
1: (?? ??)
2: 
3: (?? ? .) = ????? : ?? ?? ?? ???? ???????
_____________________________________________
Run Code Online (Sandbox Code Playgroud)


PS:所以,这是你的新场景:第一部分()是可选的,第二部分[]是可选的,但第三部分是强制性的; 根据以上的例子中,第三部分也可以开始与一个(*),由于这一点,并考虑的例子中B (A)NO的方式来确定的例子是,其中具有任选的第一部分的格式(A),然后强制第三部分B,或者是一种格式没有任何可选部分,但强制第三部分是整个字符串,如果不是问题,你可以使用它~(.*?\)\s)?(\[.*?\]\s)?(.*)~作为正则表达式.