【发布时间】:2012-01-31 12:06:23
【问题描述】:
我想 preg_replace 一些文本,但前提是它没有被评论。这是给定文本的示例:
// delete_me('First');
delete_me('Second');
/* delete_me('Third'); */
delete_me('Fourth'); // Some comment behind a command.
/* Tiny bit of comment */ delete_me('Fifth');
现在在这个例子中,我只想替换第二、第四和第五行。我想用新参数替换参数。所有文本都在一个大字符串中,由换行符分隔。
我确实有一些 preg_replaces 可以删除评论部分,但由于我不想删除它们,它没有多大用处,但也许它可以帮助某人帮助我。
$text = preg_replace("/\/\/(.*)/", $replace, $text);
$text = preg_replace('!/\*(.*)\*/!s', $replace, $text);
谁能帮我替换没有 PHP 注释的行上的给定参数?谢谢!
【问题讨论】:
-
我认为这对于正则表达式是不可能的。它与 HTML 和 Regex 相同。您不能简单地匹配注释,因为它们可能在一个字符串中,并且您不能匹配这些字符串,因为它们可能在 cmets 中。你需要的是 PHP Tokenizer。
-
这不是真的。您可以在合理范围内匹配字符串,请参阅下面的评论。
-
@TimWolla 但您可以将正则表达式用作简单的分词器...
-
delete_me('is this /* commented? */');
标签: php regex preg-replace