2011-05-05 26 views

回答

3

看一看這個鏈接:http://ostermiller.org/findcomment.html

他到了該解決方案(爲/* ... */評論):

sourcecode.replaceAll("/\\*(?:.|[\\n\\r])*?\\*/",""); 

// ...# ...意見,你應該能夠做到像

sourcecode.replaceAll("(//|#).*?[\\n\\r]"); 

謹防以下類型的情況。雖然:

  • someString = "An example comment: /* example */";

  • someString = "An example comment: // example";

  • someString = "An example comment: # example";

+0

這將不修剪英鎊和雙斜線評論 – 2011-05-05 13:43:38

+0

正確。它用於'/ * ... * /'註釋。更新了答案。 – aioobe 2011-05-05 13:44:15

+0

PHP允許您使用#號開始評論。 – 2011-05-05 13:47:39

1

這將是非常棘手!

首先,您有三種類型的PHP註釋:/* ... */,還有//#

但是,您需要排除那些屬於字符串的部分,特別是因爲//可能經常出現在字符串中,因爲字符串中的轉義斜槓字符和#字符可能是文本的完全合法部分。

爲了解決這個問題,字符串可以是多行的,並且除了單引號和雙引號之外,還可以使用Heredoc和Nowdoc語法編寫它們(請參閱http://php.net/manual/en/language.types.string.php),這可能會非常難以精確地選出與正則表達式。另外,當然,你需要確保你在<?php ... ?>標籤內。

它可能可以完成,但說實話,我會說所有這些處理,使用語言解析器比使用正則表達式來嘗試執行此操作要好得多。

1

像Spudley說的,你不能簡單地寫一個正則表達式來做到這一點。有太多的例外情況,比如字符串中的註釋式字符串,以及行式註釋通過關閉PHP標籤而提前終止。爲了保證正確性,你可能必須編寫一個完整的語言解析器。

但是,如果您願意使用PHP本身爲您進行篩選,this question具有所有的答案,並且它應該更容易和更強大。如果您將PHP安裝在與Java應用程序相同的機器上,則可以使用Runtime.exec()運行PHP並獲取控制檯輸出,或者將PHP導出爲文件並稍後將其導入到程序中。