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

标签 php regex string

我有一个想要分离的组合字符串。

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

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/

相关文章:

php - 在PHP中正确使用SQLite3

javascript - 具有全局多行无限匹配的正则表达式

java - 解析足球队和结果

javascript - 如何在字符串中找到最长的单词并返回那些(不包括重复项)以及最大长度?

c++ - 使用 string::find_first_not_of 和 string::find_last_not_of 的问题

php - PDO 准备语句不更新表

php - DELETE FROM 不起作用(mysql)

php - MySQL UPDATE CASE 未按预期工作

javascript - 我的正则表达式有什么问题?

string - 在 Swift 中重新排序字符串字符