انفجار الاختصارات لضمان قراءتها المزج بشكل صحيح؟
-
04-10-2019 - |
سؤال
إذا قمت بإطعام مزج خطاب (مهرجان ، في هذه الحالة ، ولكنه ينطبق على الجميع) الجزء التالي من النص:
"في بطولة USPGA في الولايات المتحدة ، ذهب مراسل بي بي سي MIA". يقرأ "في بطولة USPGA في الولايات المتحدة ، ذهب مراسل بي بي سي ميا".
بمعنى آخر ، أعتقد أنه نظرًا لأنها مجموعة من الحروف الساكنة ، فإنها تقرأ "BBC" بشكل صحيح ولكنها تجعل "الكلمات" من الآخرين.
أفترض أن أبسط شيء يجب القيام به هو تشغيله من خلال برنامج نصي PHP الذي يبحث عن حرفين أو أكثر ، وببساطة "ينفجر" الكلمة في مسافات ، مثل USPG A.
أدرك أن هذا سيؤدي إلى غرابة في أشياء مثل "أخبرته ألا يفعل ذلك" ، ولكن في التقارير الإخبارية التي تميل إلى أن تحدث أقل.
هنا الحاجة؛ يمكنني "تنفجر" كلمة طيب ، والمشكلة هي ، أنا واحد من هؤلاء الأشخاص الذين ، على الرغم من شهور من المحاولة ، لا يمكنهم الحصول على جوانب معينة من Regex. في هذه الحالة ، تبحث عن: رسالتين أو أكثر بجوار بعضهما البعض في العواصم.
السبب في أنني أعطيت كل ما قبل الرابطة أعلاه هو أن هناك طريقة أفضل للقيام بذلك لم أجدها أو من خلالها - ربما ديسيبل من الاختصارات على الكلمات أو شيء من هذا القبيل.
المحلول
إن استخدام تعبير Delan المعتاد مع preg_replace_callback () يجعل من السهل جدًا وضع مساحة واحدة بين جميع أحرف الاختصارات المحددة
$input = "At the USPGA championship in the US, the BBC reporter went MIA";
function cb_separateCapitals($matches) {
return implode(' ',str_split($matches[0]));
}
echo $input,'<br />';
$output = preg_replace_callback('/\b([A-Z]{2,})\b/','cb_separateCapitals',$input);
echo $output;
إعطاء
في بطولة USPGA في الولايات المتحدة ، ذهب مراسل بي بي سي ميا
في بطولة USPGA في الولايات المتحدة ، ذهب مراسل بي بي سي ميا
نصائح أخرى
نمط لمطابقة الاختصارات:
/\b([A-Z]{2,})\b/
هذا يطابق أي "كلمة" مع اثنين أو أكثر من العواصم.
يمكنك تبسيط الكود الخاص بك بشكل كبير باستخدام أ تأكيد Lookahead
$input = "At the USPGA championship in the US, the BBC reporter went MIA";
echo preg_replace('~[A-Z](?=[A-Z])~', '$0 ', $input);
[A-Z](?=[A-Z])
يقول "كل عاصمة تليها رأس مال"
"[A-Z][A-Z]"
سوف يتطابق مع أي مثيل لرسالة رأس المال بجانب بعضهما البعض.