【问题标题】:PHP regex to remove single line comments [duplicate]PHP正则表达式删除单行注释[重复]
【发布时间】:2018-03-31 15:07:32
【问题描述】:

我知道这个问题的变体已经被问过很多次,但我发现的其他解决方案都没有对我有用。

我只是想提出一个正则表达式来删除可能出现在某些 javascript 中的任何单行 cmets。

理想情况下,它应该有某种方法来检查两个正斜杠是否不是任何实际脚本的一部分。

$("a[href='#top']").click(function() { // This should be removed

$('html, body').animate({
    scrollTop:0
}, 'slow');

return false;

});

var SomeURL = 'http://www.google.com'; // This comment should be removed but the URL should not

我有这个:

$fileContents = preg_replace('/\/\/.*/', '', $fileContents);

...但这会破坏我的代码,因为它会删除 URL 以及单行 cmets

【问题讨论】:

  • 这对于正则表达式来说会很痛苦,因为您正在搜索上下文敏感模式。 E.G var a = '// some string' 不应该被删除,但var a = 'some string' // comment here 应该被删除。
  • here 中提出的解决方案似乎有效!
  • @bassxzero 我想如果正则表达式只是检查// 之后是否存在分号以忽略它。我就是不知道怎么写。
  • @JROB 没那么简单。 var a= 'blah';var b='blah blah'; // comment \n 可以出现在一行上并且在语法上是有效的。这更像是解析器的工作。
  • 然后您将捕获超过一行的 URL。它并没有你想象的那么简单,并且不能用正则表达式可靠地完成。

标签: php


【解决方案1】:

正则表达式不够复杂,无法(优雅地)在所有情况下执行此操作,但您可以使用一些假设。例如:由于// 只能是 a) 注释或 b) 字符串的一部分,因此您应该能够执行以下操作:

\/\/[^;)]*$

这意味着评论后可能没有;)。但是,这仅在您未在评论中使用它们时才有效。您当然可以使用任何字符,例如 ' 和/或 ",以更好地满足您的需求。

【讨论】:

  • 如何只删除 PHP cmets "//" 并留下网页链接? 'http://this-is-not-comment.net
  • @IvanZ Ähm,这正是这个答案。你真的不能用正则表达式完美地做到这一点,但这应该适用于大多数行。这个正则表达式到底有什么问题。你可以细化它。
  • 试试^([\t| ]*)\/\/.*\n
猜你喜欢
  • 2019-08-28
  • 2012-04-08
  • 2020-09-30
  • 1970-01-01
  • 2017-07-26
  • 2011-01-28
  • 2011-04-01
  • 1970-01-01
相关资源
最近更新 更多