字符串内容:
abc def ghi jkl mno 
{abc def ghi jkl mno} 
abc def ghi jkl mno 
{abc def ghi jkl mno}用正规表达式怎样把{}之外内容中的def替换成opq,jkl替换成mno?
替换的结果如下:
abc opq ghi mno mno 
{abc def ghi jkl mno} 
abc opq ghi mno mno 
{abc def ghi jkl mno}
谢谢了

解决方案 »

  1.   

    <?php
    $s = "abc def ghi jkl mno 
    {abc def ghi jkl mno} 
    abc def ghi jkl mno 
    {abc def ghi jkl mno}
    ";
    $patterns = array(
    "/([^{]*)def([^}]*)/",
    "/([^{]*)jkl([^}]*)/"
    );
    $replace = array(
    "\\1opg\\2",
    "\\1mno\\2"
    );
    echo preg_replace($patterns,$replace,$s);
    ?>输出:
    abc opg ghi mno mno 
    {abc def ghi jkl mno} 
    abc opg ghi mno mno 
    {abc def ghi jkl mno}
      

  2.   

    试了一下xuzuning(唠叨) 兄弟的,果然可以
    <?php
    $s = "abc def ghi jkl mno 
    {abc def ghi jkl mno} 
    abc def ghi jkl mno 
    {abc def ghi jkl mno}
    ";
    $patterns = array(
    "/([^{]*)def([^}]*)/",
    "/([^{]*)jkl([^}]*)/"
    );
    $replace = array(
    "\\1opg\\2",
    "\\1mno\\2"
    );
    echo preg_replace($patterns,$replace,$s);
    ?>要是分隔符{变成[code],}变成[/code],那应该怎样变呢?
      

  3.   

    相似的
    /(.*)\[code\](.*)\[\/code\](.*)/
      --          --            --
      \\1         \\2           \\3
    被()括起的部分按()出现顺序编号
    你可以自由组合
    可以先用int preg_match_all(string pattern, string subject, array matches, int [order]);函数分析结果,看表达式是否正确
      

  4.   

    <?php
    $s = "abc def ghi jkl mno 
    {abc def ghi jkl mno} 
    abc def ghi jkl mno 
    {abc def ghi jkl mno}
    ";
    $patterns = array(
    "/([^{]*)def([^}]*)/",
    "/([^{]*)jkl([^}]*)/"
    );
    $replace = array(
    "\\1opg\\2",
    "\\1mno\\2"
    );
    echo preg_replace($patterns,$replace,$s);
    ?>要是分隔符{变成[code],}变成[/code],那应该怎样变呢?
      

  5.   

    不会吧!字符串内容:
    abc def ghi jkl mno
    [code]abc def ghi jkl mno[/code]
    abc def ghi jkl mno
    [code]abc def ghi jkl mno[/code]用正规表达式怎样把[code]...[/code]之外内容中的def替换成opq,jkl替换成mno?
    替换的结果如下:
    abc opq ghi mno mno
    [code]abc def ghi jkl mno[/code]
    abc opq ghi mno mno
    [code]abc def ghi jkl mno[/code]我写的这个只能替换里面的分隔符里面,不能替换外面的内容。
    $patterns = array(
    "/(\[)(code)(])(\r\n)*(.*)def(.*)(\[\/code\])/",
    "/(\[)(code)(])(\r\n)*(.*)jkl(.*)(\[\/code\])/"
    );
    $replace = array(
    "\\5opg\\6",
    "\\5mno\\6"
    );
      

  6.   

    这样也不行
    $patterns = array(
    "/(\[)(\/code)(])(\r\n)*(.*)def(.*)(\[code\])/"
    );
    $replace = array(
    "\\6opq\\7"
    );
      

  7.   

    没有人回答!$searcharray  = array("/([^\x80]*)asdf([^\x81]*)/i");
    $replacearray = array("\\1凌萍\\2");怎样替换全部