在问号和感叹号之前添加空格

在问号和感叹号之前添加空格

问题描述:

我的客户希望在感叹号和问号之前留出空格。为了确保这样做总是正确的,我在php中使用下面的脚本。此脚本将删除任何现有的空间,然后所有问号和感叹号之前把一个非换空间:在问号和感叹号之前添加空格

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

这一切工作正常,但我在想,如果有一个与正则表达式更好的办法?

+0

感谢戴夫对格式化的重新编排 - 我总是在与代码标签争执 - 这四个空间似乎并不适合我。 –

使用preg_replace

用正则表达式将是这样的:

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

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

您可以使用

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

PHP demo

详细

  • \s* - 0+空格符号
  • ([?!]) - 第1组捕获?!

替换模式只包含 和反向引用,以第1项内容插入捕获的文本。