2013-04-23 4 views
2

Я немного озадачен поведением Groovy regex.Groovy регулярное выражение. Соответствие началу строки

"dog" == /dog/ - return true 

"dog" == /^dog/ - return false 

Мое понимание, что^соответствует началу строки, поэтому второе выражение должно также возвращать значение true.

То, что я на самом деле пытаюсь сделать, это заменить «#» в начале строки, используя

line = line.replace(/^#/, '') 

, но «#» не удаляется

ответ

10

В Groovy, есть много способов объявление строк;

println('foo') // regular string 
println('''foo''') // multiline string 
println("foo") // templatable string 
println("""foo""") // multiline templatable string 
println(/foo/) // slashy string 
println($/foo/$) // dollar slashy string (also multiline) 

Все перечисленные выше строки, так:

"dog" == /dog/ - return true 

Поскольку обе стороны являются String (и тот же String), поэтому они равны друг другу

Если вы хотите сделать Поиск по шаблону, вам нужно ==~ оператор:

"dog" ==~ /^dog/ 

Который возвращает истину. Не знаю, почему у вас в replaceAll в ):

def line = '#Foo' 
line.replaceAll(/^#/, '') == 'Foo' 

Возвращает истинное

+0

«)» опечатка. Я удалил его. Поэтому в основном моя оригинальная проблема заключалась в том, что я использовал «replace» вместо «replaceAll». «replace» не принимает RegEx, поэтому моя строка не обрабатывалась как RegEx. Большое спасибо за ваш ответ и объяснение Strings – apolenur

Смежные вопросы