我有一个想要分离的组合字符串。
我的模式:(阿拉伯语,从右侧开始):
str3[str2](str1)
<小时/>
示例 1
对于输入:
string = تَ) [ ع . ] (مص م .) راست کردن ، معتدل کردن)
我想要输出:
$str1='(تَ)';
$str2='[ ع . ]';
$str3='مص م .) راست کردن ، معتدل کردن)';
<小时/>
示例 2
对于输入:
string = اِ تَ) (مص ل .) = اباته : شب را در جایی گذراندن)
我想要输出:
$str1='(اِ تَ)';
$str2='';
$str3='مص ل .) = اباته : شب را در جایی گذراندن)';
<小时/>
示例3
对于输入:
string = [ ع . ] (مص م .) راست کردن ، معتدل کردن
我想要输出:
$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)?(.*)~
作为正则表达式。
关于php - 如何分隔字符串(阿拉伯字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30424432/