2016-12-06 4 views
0

Мой клиент хочет иметь место перед восклицательными знаками и вопросительными знаками. Чтобы это всегда делалось правильно, я использую следующий скрипт в php. Этот сценарий удаляет все существующие пробелы, а затем помещает неразрывный пробел перед всеми знаками вопроса и восклицательных знаков:Добавить пробел перед вопросительным знаком и восклицательным знаком

$text = str_replace(' ?', '?', $text); 
$text = str_replace('?', ' ?', $text); 
$text = str_replace(' !', '!', $text); 
$text = str_replace('!', ' !', $text); 
return $text; 

Это все работает нормально, но мне было интересно, если есть лучший способ с Regex?

+0

Спасибо Дэйву за переформатирование - я всегда борется с тегом кода - четыре пространства не работают для меня. –

ответ

3

Использование preg_replace

с регулярным выражением он будет выглядеть следующим образом:

preg_replace('/(\S)([?!])/', '$1 $2', $text); 
1

preg_replace("/\s?(!|?)/", " $1", $string);

5

Вы можете использовать

$text = "No? Oh ? And ! and!"; 
$text = preg_replace('~\s*([?!])~', ' $1', $text); 
echo $text; 

См PHP demo

Деталь:

  • \s* - 0+ пробельных символы
  • ([?!]) - Группа 1 захватывая ? или !

Шаблон замены содержит только   и обратную ссылку на 1-й группу содержания в вставьте захваченный текст.

Смежные вопросы