【问题标题】:PHP regex replace white space by   if it is following single letter如果 PHP 正则表达式跟随单个字母,则将空格替换为
【发布时间】:2011-01-06 21:00:38
【问题描述】:

我有用户定义的字符串(要保存并在 Web 中使用的 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" ...等等...

【问题讨论】:

  • ASCII 字母表之外的单个字母呢? "Allons à la plage?" - 甚至是"Allons à la plage?"

标签: php regex replace


【解决方案1】:
preg_replace('/(?<=\b[a-z]) /i', '&nbsp;', $s);

这里的正则表达式执行positive lookbehind,确保空格前面有单个字母和单词边界。

【讨论】:

  • 我建议将\s 替换为\b,在这种情况下可以使用i am
  • @Ivan: [呃;我讨厌@] 好点。我把\s 放在那里是因为我仍然认为一开始的单个字母不算数。但这是基于有缺陷的其他假设(以及在引号周围放置空格的 OP 的奇怪格式......)
【解决方案2】:

没有正则表达式

$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) );

【讨论】:

    【解决方案3】:
    <?php
    
    $str = 'your string';
    
    $str = preg_replace(array('/ ([a-zA-Z]) /', '/^([a-zA-Z]) /', array(' $1&nbsp;', '$1&nbsp;'), $str);
    
    ?>
    

    应该做的伎俩。

    【讨论】:

      【解决方案4】:

      为来自数据库的文本保留空格和换行符:

      <pre>
      echo nl2br(str_replace(' ','&nbsp', stripslashes( database_string )));
      <pre>
      

      【讨论】:

        猜你喜欢
        • 2017-08-15
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 2011-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多