Php помещают пространство перед прописными буквами в строке (Regex)

Пожалуйста, проверьте следующий код: -

.backgroundImageCVR{
	position:relative;
	padding:15px;
}
.background-image{
	position:absolute;
	left:0;
	right:0;
	top:0;
	bottom:0;
	background:url('http://www.planwallpaper.com/static/images/colorful-triangles-background_yB0qTG6.jpg');
	background-size:cover;
	z-index:1;
	-webkit-filter: blur(10px);
  -moz-filter: blur(10px);
  -o-filter: blur(10px);
  -ms-filter: blur(10px);
  filter: blur(10px);	
}
.content{
	position:relative;
	z-index:2;
	color:#fff;
}
<div class="backgroundImageCVR">
    <div class="background-image"></div>
    <div class="content">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis aliquam erat in ante malesuada, facilisis semper nulla semper. Phasellus sapien neque, faucibus in malesuada quis, lacinia et libero. Sed sed turpis tellus. Etiam ac aliquam tortor, eleifend rhoncus metus. Ut turpis massa, sollicitudin sit amet molestie a, posuere sit amet nisl. Mauris tincidunt cursus posuere. Nam commodo libero quis lacus sodales, nec feugiat ante posuere. Donec pulvinar auctor commodo. Donec egestas diam ut mi adipiscing, quis lacinia mauris condimentum. Quisque quis odio venenatis, venenatis nisi a, vehicula ipsum. Etiam at nisl eu felis vulputate porta.</p>
      <p>Fusce ut placerat eros. Aliquam consequat in augue sed convallis. Donec orci urna, tincidunt vel dui at, elementum semper dolor. Donec tincidunt risus sed magna dictum, quis luctus metus volutpat. Donec accumsan et nunc vulputate accumsan. Vestibulum tempor, erat in mattis fringilla, elit urna ornare nunc, vel pretium elit sem quis orci. Vivamus condimentum dictum tempor. Nam at est ante. Sed lobortis et lorem in sagittis. In suscipit in est et vehicula.</p>
    </div>
</div>
34
задан Paul M 6 July 2009 в 23:40
поделиться

4 ответа

Проблема

  1. Регулярное выражение '~ ^ [AZ] ~' будет соответствовать только первой заглавной букве. Для получения дополнительной информации см. Мета-символы в Синтаксисе шаблона .

  2. Ваша замена - символ новой строки '\ n' , а не пробел.

] Решение

Используйте этот код:

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

(? - это утверждение , которое гарантирует, что мы не добавим пробел перед заглавной буквой, которая перед ним уже есть место.

69
ответ дан 27 November 2019 в 16:18
поделиться
$string = preg_replace('/[A-Z]/', ' $0', $string);

Maybe run the result through ltrim after.

$string = ltrim(preg_replace('/[A-Z]/', ' $0', $string));
13
ответ дан 27 November 2019 в 16:18
поделиться

Вот мой .02c, эта версия будет работать только с первым словом и сохранит последовательности заглавных букв (BMW).

$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;
3
ответ дан 27 November 2019 в 16:18
поделиться

Я не разбираюсь в регулярных выражениях, но я бы предложил что-то вроде следующего кода:

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

Глядя на код SirLancelot, у меня есть второе решение. Тем не менее, я предпочитаю решение Explode, поскольку вы заявили, что ваша цель - это только первое слово строки.

$string="ThisWasCool to visit you again";
$temp = explode(' ',$string, 2);
$temp[0] = preg_replace('/(?<!^)([A-Z])/',' $0', $temp[0]);
$string = join(' ',$temp);
1
ответ дан 27 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: