2013-12-13 3 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? Использует ли он синтаксис regex, отличный от Java? –

+0

Это так и есть. см. его, кроме двойных кавычек, заставит Groovy попробовать и расширить unescaped '$'. Не знаете, где PHP входит в него? –

1

Хорошо, я получил ответ от колледжа.

Если это была одна строка, код в описании работает. Потому что у меня мультилиний, я должен использовать следующее:

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

+0

Или используйте '(? M)', как показано в ответе, полученном от Tim –

2

И если вы хотите сохранить //noch einer строку как пустая строка в вашем выводе, вы можете попробовать:

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

Конечно, если строка выше была в вашем тексте ввода, то все это перемещение регулярных выражений приведет к поломке входного кода, так как эта линия станет input.replaceAll('(?m)

Как правило, это вид регулярного выражения синтаксический анализ кода никогда не является хорошей идеей