通过正则表达式删除块注释

时间:2010-11-17 17:08:06

标签: php regex

我很难让这个正则表达式工作。我要做的就是删除块注释。这是我到目前为止所做的,但我无法摆脱最后的*/

$string = 'this is a test /*asdfa  */ ok then';

$pattern = '/\/\*([^\*\/]*)/i';

$replacement = '';

echo preg_replace($pattern, $replacement, $string);

//this is a test */ ok then

任何帮助将不胜感激。

7 个答案:

答案 0 :(得分:6)

使用与/不同的分隔符 - 这会让人感到困惑。

'#/\*.+?\*/#s';

怎么样?

答案 1 :(得分:6)

token_get_all并在没有T_COMMENT的情况下重新构建它。我认为不应该说更多。

答案 2 :(得分:5)

试试这个模式:

/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/

答案 3 :(得分:1)

我正在使用此功能(请注意,您只需要/*...*/条评论的第一行):

  #-- extract /* ... */ comment block
  #  or lines of #... #... and //... //...
  if (preg_match("_^\s*/\*+(.+?)\*+/_s", $src, $uu)
  or (preg_match("_^\s*((^\s*(#+|//+)\s*.+?$\n)+)_ms", $src, $uu))) {
     $src = $uu[1];
  }
  // Public Domain, not CC

效果很好。但是像所有正则表达式解决方案一样,它会在$PHP = "st/*rings"边缘情况下失败。

答案 4 :(得分:0)

使用模式preg_replace运行/\*|\*/两次应该有效。

答案 5 :(得分:0)

也许:

$pattern = '/\/\*([.]*)\*\//i';

请不要降低速率,因为这是一个快速的猜测,试图帮助...:)

答案 6 :(得分:0)

要修复你的主要模式,我可以告诉你,你的最终“* /”不匹配,因为你的模式中没有它。

按照您自己的模式,尝试这一点修改:

'/\/\*([^\*\/]*)**\*\/**/i'

我还建议你使用不同的定界符来使模式更易读。

#/\*([^\*/]*)\*/#i