【问题标题】:preg_replace() all occurances [duplicate]preg_replace() 所有出现 [重复]
【发布时间】:2013-12-16 07:46:15
【问题描述】:

我想创建一个脚本,从文件中删除所有 cmets。我目前的正则表达式是这样的:

$new = preg_replace_all("/(\/\*.*\*\/)/s", "", $contents);

匹配(并删除)/**/ 之间的任何内容

当文件的内容是这样的时候问题就很明显了,例如:

/* First comment */ 
first_function();

/* Second comment */ 
second_function();

我的正则表达式没有删除第一个和第二个注释并保留两个函数调用,而是匹配从第一个 /* 到最后一个 */ 的所有内容,从而完全删除了 first_function() 调用。

我想一个解决方案是用可以匹配任何东西的东西替换我的.*(匹配任何东西)直到你到达*/。但我不知道该怎么写。我预计它会像 [^\*\/] 一样,但它没有按预期工作。

什么是正确的正则表达式?

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    你们非常亲近。您只需要在.* 之后使用非贪婪匹配 字符?,如下所示:

    $new = preg_replace_all("/(\/\*.*?\*\/)/s", "", $contents);
                                     ^
                                     ^
                                     ^
                                     ^
    

    你只需要一个问号……

    在工作中看到这个here

    【讨论】:

    • 非贪婪匹配字符...我喜欢它的名字:P 谢谢。
    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2012-02-11
    • 2021-05-25
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多