2012-07-15 52 views
0

我创建了一个PHP的正则表达式来找到所有的意见/ * * /在我测试它使用这个测试工具http://regexpal.com/使用PHP的preg_replace用正则表达式

/\*(.*\s){0,}.*\*\/ 

我然后用分隔符#包围它,它工作的字符串它适用于preg_replace,但现在它不起作用。

#/\*(.*\s){0,}.*\*\/# 

$fileContents = preg_replace("#/\*(.*\s){0,}.*\*\/#","Replacement Text",$fileContents); 

当我回显$ fileContents时,什么都不打印出来。我究竟做错了什么?

+1

它看起来像[我的作品](http://viper-7.com/cNZnqL)。你有没有失败的测试用例? – nickb 2012-07-15 23:19:09

+0

它为什么看起来如此复杂?你可以使用'。*?'和#s' dotall修饰符来代替内部匹配。 – mario 2012-07-15 23:21:36

+0

提示:'{0,}'与'*'相同。你有没有检查过'$ fileContents'实际上是否包含一些东西,然后再将它送入preg_replace?即使正则表达式没有找到任何替代,你应该至少得到原始字符串。 – 2012-07-15 23:37:28

回答

0
<?php 
    $fileContents = "Hello /* comment here */ World"; 
    $fileContents = preg_replace('#\/\*.*\*\/#m','',$fileContents); 
    echo $fileContents; // outputs Hello World 

    $fileContents = <<<END 
Hello 
/* 
* Comment spanning several lines.. 
* 
*/ 
Earth 
END; 

    $fileContents = preg_replace('#\/\*.*\*\/#m','',$fileContents); 
    echo $fileContents; // outputs Hello Earth 
?> 

m在正则表达式匹配“多行”,这样,当评论对几行跨越,它仍然可以匹配他们的结束。默认匹配是单行。

见PCRE供大家参考:http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

+0

这不是'#m'所做的。它会影响'^'和'$'如何匹配换行符而不是主题开始和结束。 – mario 2012-07-16 14:38:35

+0

当我使用你的例子它的作品,但是当我用我的文本取代它不? – Ali 2012-07-16 17:44:35