2013-12-13 70 views
1

我想刪除字符串中的簡單//註釋。 我的字符串被稱爲輸入刪除字符串中的註釋?

def input = '''test //kommentar 
       | 
       |//noch einer 
       | 
       |und  noch //einer'''.stripMargin() 

的正則表達式是\s*\/\/.*$可以在這裏http://regexr.com?37ks0

來測試我的代碼,我有input = input.replaceAll(/\s*\/\/.*$/ , '')

但它不工作。有誰能夠幫助我 ?

回答

2

最起碼,你需要確保$錨允許各行的末尾匹配,而不是整個字符串的結尾:

input = input.replaceAll(/(?m)\s*\/\/.*$/ , '') 

但如果//發生,說,在一個引用的字符串?或者在其他情況下,他們不是指「開始評論」?

+1

答案是'(?m)'。你的例子不會像它那樣工作,因爲它不適用於''',你需要:''(?m)\\ s * //。* $''或'/(?m)\ s * \/\ /.*$/'作爲你的模式 –

+0

@tim_yates:我認爲這是關於Groovy的嗎?它是否使用與Java不同的正則表達式? –

+0

它是,它確實如此。除了雙引號以外,看看它會使Groovy嘗試並擴展未轉義的'$'。不確定PHP進入它的哪個位置? –

1

好吧,我從大學得到了答案。

如果是一行,說明中的代碼有效。 因爲我多線,我必須使用以下命令:

input = input.replaceAll(Pattern.compile(/\s*\/\/.*$/, Pattern.MULTILINE), '')

+0

或者使用'(?m)'如您從Tim獲得的答案中所示 –

2

如果你想保持//noch einer線在你的輸出一個空白行,你可以嘗試:

input.replaceAll('(?m)//.*$' , '') 

當然,如果上面的行在你的輸入文本中,那麼所有這種正則表達式掃描會破壞輸入代碼,因爲該行會變成input.replaceAll('(?m)

作爲一般規則,代碼的正則表達式解析從來不是一個好主意