Php bir dize (Regex) sermayeler önünde bir boşluk koymak

4 Cevap php

Ben birlikte demetler halinde ve ben onları ayırmak için gereken kelimeleri içeren dizeleri bir dizi var.

For example ThisWasCool - This Was Cool
MyHomeIsHere - My Home Is Here

Im yavaş yavaş normal ifadeler etrafında başımı alıyorum ve ben preg_replace kullanmanız gereken bu yapılacağına inanıyorum. Benim sorunum eşleşme bulmak için ifadeyi araya koyuyor.

Ben sadece bu kadar var

   preg_replace('~^[A-Z]~', " ", $string)

Each string contains a lot of words, but ONLY the first word contains bunched words so using my example above a string would be
"ThisWasCool to visit you again" - "This Was Cool to visit you again"

I have told it to start at the beginning, and look for capitals, but what I dont know how to do is - restrict it only to the first word of each string - how to reuse the capital letter in the replace part after the space

4 Cevap

Problem

  1. Sizin regex '~^[A-Z]~', sadece ilk harf maç olacak. Pattern Syntax daha fazla bilgi için, Meta Characters göz atın.

  2. Sizin yedek bir satır karakteri '\n' ve bir alandır.

Solution

Bu kodu kullanın:

$String = 'ThisWasCool';
$Words = preg_replace('/(?<!\ )[A-Z]/', ' $0', $String);

(?<!\ ) bir assertion biz zaten ondan önce bir alana sahip bir harfle önce bir boşluk eklemek yok emin olacaktır.

$string = preg_replace('/[A-Z]/', ' $0', $string);

Belki sonra, ltrim ile sonucu çalıştırın.

$string = ltrim(preg_replace('/[A-Z]/', ' $0', $string));

İşte benim .02 c var, bu sürümü sadece ilk kelimenin üzerinde hareket edecek ve büyük harfler (BMW) dizileri koruyacaktır.

$str = "CheckOutMyBMW I bought it yesterday";
$parts = explode(' ', $str);
$parts[0] = preg_replace('~([a-z])([A-Z])~', '\\1 \\2', $parts[0]);
$newstr = implode(' ', $parts);
echo $newstr;

Ben düzenli ifade ile uzman değilim ama aşağıdaki kodu gibi bir şey öneririm:

$string="ThisWasCool to visit you again";
$temp = explode(' ',$string, 2);
$temp[0] = preg_replace('/(.)([A-Z])/','$1 $2', $temp[0]);
$string = join(' ',$temp);

SirLancelot koduna baktığımızda ikinci bir çözüm var. Eğer hedef bu dize sadece ilk kelime olduğunu belirtildiği gibi hala ben patlayabilir çözümü tercih ederim.

$string="ThisWasCool to visit you again";
$temp = explode(' ',$string, 2);
$temp[0] = preg_replace('/(?<!^)([A-Z])/',' $0', $temp[0]);
$string = join(' ',$temp);