Như tôi đã đề cập trong phần bình luận, ký tự đầu tiên rõ ràng (ngoài cùng bên phải) không phải là dấu ngoặc đơn mở (nó là ký tự cuối cùng), và lỗi ẩn này gây hiểu lầm). Tuy nhiên, đoạn mã sau sửa lỗi và xuất ra các chuỗi mong muốn.
<?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>";
?>
Kết quả:.(Xin lưu ý rằng các mục là theo hướng RTL đúng và sẽ được hiển thị một cách chính xác trên một môi trường RTL (họ không hành động làm sai lệch như là đúng trên một môi trường LTR))
1: (تَ)
2: [ ع . ]
3: (مص م .) راست کردن ، معتدل کردن
_____________________________________________
1: (اِ تَ)
2:
3: (مص ل .) = اباته : شب را در جایی گذراندن
_____________________________________________
PS: Vì vậy, đây là kịch bản mới của bạn: phần thứ nhất kèm theo trong
()
là tùy chọn, phần thứ hai kèm theo trong
[]
cũng là tùy chọn, nhưng phần thứ ba là bắt buộc; Theo ví dụ của bạn ở trên, phần thứ ba cũng có thể bắt đầu bằng
(*)
, Do đó, và xem xét ví dụ về
B (A)
có
SỐ cách xác định xem ví dụ có ở định dạng có phần tùy chọn đầu tiên không. phần thứ 3 bắt buộc
B
hoặc ở định dạng không có bất kỳ phần tùy chọn nào nhưng có phần thứ ba bắt buộc là toàn bộ chuỗi, nếu đó không phải là mối quan tâm, bạn có thể sử dụng biểu thức chính quy
~(.*?\)\s)?(\[.*?\]\s)?(.*)~
.
Đó là tiếng Ba Tư, không phải tiếng Ả Rập! – someOne
@someOne bạn đúng, nhưng tôi siad tiếng Ả Rập bởi vì tôi nghĩ rằng nó là phổ biến hơn. – Shafizadeh
Meh. Tôi biết làm thế nào để làm điều đó nhưng máy tính của tôi và ngôn ngữ Ba Tư không nhìn thấy mắt để mắt nó xuất hiện xD – icecub