代码之家  ›  专栏  ›  技术社区  ›  brechtvhb

PHP条件字符串替换

  •  0
  • brechtvhb  · 技术社区  · 16 年前

    我正在尝试替换 ~ 进入之内 | 之间 [ ] 在以下情况下:

    {stackoverflow is a [cool~great~fast] website ~ Find your answers [easily~quickly] on stackoverflow}.
    

    注:文字之间 [ ] 可以是多行。

    我试过多次雷杰克斯,但没有运气。

    我现在最接近的电话是:

    $text = preg_replace("/\[(.*?)~(.*?)\]/i", "[$1|$2]", $text);
    

    但那又回来了

    {stackoverflow is a [cool~great|fast] website ~ Find your answers [easily|quickly] on stackoverflow}.
    
    3 回复  |  直到 16 年前
        1
  •  2
  •   sepp2k    16 年前

    需要使用一个regex查找括号中的所有字符串,然后使用另一个regex替换 ~ 它们在里面。你可以使用 preg_replace_callback 应用 ~ -将regex替换为括号中的所有子字符串,如下所示:

    preg_replace_callback('/\[[^\]]+\]/', function ($str) {
        return str_replace('~', '|', $str[0]);
    }, $my_string)
    
        2
  •  2
  •   user187291    16 年前

    比你想象的简单

     echo preg_replace('/~(?=[^\[\]]*\])/s', '|', $a);
    

    ?=是 lookahead assertion 然后读“followed by”。也就是说,“一个颚化符后跟一些非括号,然后是一个右括号”-这只匹配~'s的内部[]

        3
  •  0
  •   Billy    16 年前

    你用过哪些正则表达式的例子?我立即想到的是[]让你很困惑,因为它被用来匹配字符类。如果要将[或]作为文本匹配,则必须使用反斜杠将其转义为:[或\]。

    推荐文章