سؤال

إذا قمت بإطعام مزج خطاب (مهرجان ، في هذه الحالة ، ولكنه ينطبق على الجميع) الجزء التالي من النص:

"في بطولة 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]" سوف يتطابق مع أي مثيل لرسالة رأس المال بجانب بعضهما البعض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top