【在线等待】~~用正则如何替换前面的N个空格呢? ~~

zhiin1 2005-11-29 12:19:20
有一字符串前面有N个半角空格(中间与后面也可能包含半角空格)

如果我想把前面的N个半角空格每两个换成一个全角空格用正则应该怎么做呢?
(例如:如果前面有11个半角空格,那么就换成5个全角空格与剩余的一个半角空格)
...全文
257 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gdj 2005-11-30
  • 打赏
  • 举报
回复
其实这么多方法都差不多的。随便用一个吧。看个人喜好了。
Gdj 2005-11-30
  • 打赏
  • 举报
回复
$str='_____ABCD___EFG';

echo preg_replace("/^((__)*)(.*?)/e","str_replace('__','—','$1').'$3'",$str);
gu1dai 2005-11-29
  • 打赏
  • 举报
回复
[\t ]{2}
表示tab或空格,匹配2次。

不知道你要这个正则有什么用。
或许你解决问题的思路需要改一下。
zhiin1 2005-11-29
  • 打赏
  • 举报
回复
谢谢各位!

如果正则可以取得匹配的个数就好了 :-)
  • 打赏
  • 举报
回复
\s*
xuzuning 2005-11-29
  • 打赏
  • 举报
回复
直接用正则表达式是不能完成的,要借助工具

//为了便于检查,分别用_和—代替半角和全角空格

//方法一
function foo($s) {
$n = floor(strlen($s[1])/2);
$m = strlen($s[1])%2;
return str_repeat('—', $n).($m ? substr($s[1], -1) : '');
}
$s = '_____ABCD_EFG';
echo preg_replace_callback('/^(_+)/', 'foo', $s );

//方法二
function foo1($s) {
$n = floor(strlen($s)/2);
$m = strlen($s)%2;
return str_repeat('—', $n).($m ? substr($s, -1) : '');
}
$s = '_____ABCD_EFG';
echo preg_replace('/^(_+)/e', 'foo1("$1")', $s );

//方法三
$s = '_____ABCD_EFG';
do {
$t = $s;
$s = preg_replace('/^(_*)__/', '$1—', $t);
}while($t != $s);
echo $s;

//方法四
$s = '________ABCD_EFG';
$p = array(
'/(^)__/',
'/(—)__/',
'/(—)__/',
'/(—)__/',
'/(—)__/',
'/(—)__/',
);
echo '<br>';
echo preg_replace($p, '$1—', $s);

piner 2005-11-29
  • 打赏
  • 举报
回复
没写出来,不过想了一个比较笨一点的办法
$str = " aa bbb ";
$aa = str_replace(ltrim($str), "", $str);
$bb = preg_replace("/([\s]{2})/","\t",$aa);

echo $bb.ltrim($str);
Gdj 2005-11-29
  • 打赏
  • 举报
回复
只不过写错了。只能转第一个空格>:D
等会有空了我再改正。不过估计一会已经有人发了。
zalvsa 2005-11-29
  • 打赏
  • 举报
回复
for($i=0;$i<strlen($value);$i++){
$first = substr($value,$i,1);
$second = substr($value,$i+1,1);
$third = '';
if($first == ' ' and $second == ' '){
$third = ' ';
$i++;
$end .= $third;
continue;
}else{
$end .= $first;
}
}
echo '*'.$end."<br>";
Gdj 2005-11-29
  • 打赏
  • 举报
回复
我没误解你的意思。我的那个正则就是把半角变全角的。
zalvsa 2005-11-29
  • 打赏
  • 举报
回复
正则烂,提供个比较笨的方法:分割字符串判断
zhiin1 2005-11-29
  • 打赏
  • 举报
回复
gu1dai(异域苍穹......追夢人) : 行不通!

Gdj(陈水.智商只有129.非卖品): 误解我的意思,我要的是把半角变全角!
Gdj 2005-11-29
  • 打赏
  • 举报
回复
$str=preg_replace("/^([ ]*) /","$1 ",$str);

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧