echo preg_replace( '/(a)(.+)(b)/is', '$1($2+1)$3',$a);

解决方案 »

  1.   

    楼上不是我想要的结果,数字105要变成104

    a
    105
    b
    要通过preg_replace变成
    a
    104
    b
      

  2.   

    $a= 'a
    105
    b';
    echo preg_replace('/(a.)(\d+)(.b)/se',"'\\1'.('\\2'-1).'\\3'",$a);
      

  3.   

    $a= 'a
    105
    b '; =========================你在替换之前把$a输出一下,会发现$a本身就不是换行的,那么替换之后,自然也不会换行,这很正常吧。
      

  4.   

    但你的答案输出了我想要的结果,是对的
    =====================================?
    这句话没看明白楼主的意思是,源代码的$a就是断行定义的?
    然而在替换之后,结果却是断行输出的?那可不可以这样说,你想要的就是$a = a105b;求一正则,利用e的反向引用,替换出a
    104
    b的效果?
      

  5.   

    <?php
    $a= 'a
    105
    b ';echo preg_replace( '/(a               //此处换行是故意加上去的...
    )(.+)(                                //此处也是.....
    b)/ie ', '${1}.($2-1).${3} ',$a);
    ? > 
    ==========================================================================晕,总算看明白了.....原来在变量定义和正则表达式替换时都人为的进行了换行,一直没注意到,以为是排版有问题呢......php默认去掉回车和换行的,所以如果单凭代码书写的版式来控制输出结果的格式,应该是控制不了的吧不敢说的很绝对,等高手吧...学习~~~~