代码之家  ›  专栏  ›  技术社区  ›  Abdus Sattar Bhuiyan

使用正则表达式匹配多行,并使用regexp和PHP修改这些匹配行

  •  -1
  • Abdus Sattar Bhuiyan  · 技术社区  · 7 年前

    #include<math.h>
    #include<stdio.h>
    
    int main()
    

    我想换一个 #include<math.h> 具有 <span class="header">#include<math.h> </span> #include<stdio.h> 具有 <span class="header">#include<stdio.h></span>

    <span class="header">#include<math.h></span>
    <span class="header">#include<stdio.h></span>
    
    int main()
    

    首先,我尝试将我的目标单词与以下格式进行匹配: /#包括<[^>]+&燃气轮机/转基因的

    现在我试着准备这些匹配的行,如下所示:

     <span class="header">#include<math.h></span>
     <span class="header">#include<stdio.h></span>
    

      <?php 
        $input = '#include<math.h>
            #include<stdio.h> 
           int main()';
        $input = preg_replace('/(#include<[^>]+>)/gm','<span class="header">$0</span>',$input);
    
        echo $input;
        ?>
    

    这段代码给出了一个错误,并且知道php不支持“g”。这项简单的任务使我消磨了一天。任何帮助都将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ethan Arti Singh    7 年前

    以下是解决您问题的PHP解决方案:

    $str = <<<EOF
    #include<math.h>
    #include<stdio.h>
    
    int main()
    EOF;
    $str = preg_replace('/(#include<[^>]+>)/', '<span class="header">$1</span>', $str);
    echo $str;
    

    这将产生:

    <span class="header">#include<math.h></span>
    <span class="header">#include<stdio.h></span>
    
    int main()
    

    3v41.org demo

    preg_replace 将匹配 全部的 比赛 事件,而不是替换它们,您需要使用 preg_match_all preg_match ,因为PHP不支持 /g 预赛 功能。


    对于RegExr,您需要添加全局 g

    您的最终正则表达式应如下所示:

    /#include<[^>]+>/gm
    

    RegExr screenshot

    RegExr demo