Регулярное выражение PHP заменяет пробел, если оно следует за одной буквой

У меня есть определенная пользователем строка (строка в формате html для сохранения и использования в Интернете), и мне нужно найти способ заменить каждое пустое пространство, которое находится сразу после одной буквы, на  .

Например, "this is a string" должно стать "this is a string",

"bla bla b l abla b la blabla" должно стать "bla bla b l abla b la blabla" ...и т.д...


person WebXpert    schedule 19.01.2010    source источник
comment
Как насчет отдельных букв вне алфавита ASCII? "Allons à la plage?" - или даже "Allons à la plage?"   -  person Tim Pietzcker    schedule 19.01.2010


Ответы (4)


preg_replace('/(?<=\b[a-z]) /i', '&nbsp;', $s);

Регулярное выражение здесь выполняет положительный просмотр назад, который гарантирует, что пробелу предшествует одна буква и граница слова.

person Joey    schedule 19.01.2010
comment
Предлагаю заменить \s на \b, что в данном случае будет работать i am - person Ivan Nevostruev; 19.01.2010
comment
@Иван: [ээээ; Я ненавижу @] Хороший вопрос. Я поставил \s, потому что все еще думал, что одна буква в самом начале не считается. Но это было основано на ошибочных других предположениях (и странном форматировании ОП, который помещал пробелы вокруг кавычек...) - person Joey; 19.01.2010

без регулярного выражения

$str = "this is a string" ;
$s = explode(" ",$str);
foreach ($s as $i => $j){
    if (strlen($j)==1){
        $s[$i]="$j&nbsp;";
    }
}
print_r ( implode(" ",$s) );
person ghostdog74    schedule 20.01.2010

<?php

$str = 'your string';

$str = preg_replace(array('/ ([a-zA-Z]) /', '/^([a-zA-Z]) /', array(' $1&nbsp;', '$1&nbsp;'), $str);

?>

Должен сделать трюк.

person anomareh    schedule 19.01.2010

Чтобы сохранить пробелы и разрывы строк для текста из базы данных:

<pre>
echo nl2br(str_replace(' ','&nbsp', stripslashes( database_string )));
<pre>
person user333304    schedule 05.05.2010