Groovy ma aj regularne vyrazy, tak ma napadlo, ze by sa dal vyuzit na spracovanie textu. Ale zistil som, ze regexp v Groovy funguju inac ako v Perle.
Napr, dany je subor "pokus.txt":
--------------
a
b c
2 xy
3
t 66
bcedqkq
--------------
a tu ej skript v groovy, ktory ma vypisat riadky, ktore obsahuju cislo:
--------------
// closure na spracovanie riadku
def spracujRiadok_clos ={line ->
if (line ==~ /[1-9]/) {
print "$line\n"
}
}
// main
def myfile = new File("pokus.txt")
myfile.eachLine { riadok -> spracujRiadok_clos(riadok) }
--------------
ked ho spustim, dostanem len:
3
Naproti tomu, ked si spustim obdobny skript v Perle, kde mam tiez
$line =~ /[1-9]/
dostanem to co som ocakaval:
2 xy
3
t 66
v groovy som teda pouzil
line ==~ /[1-9]/
a v Perle
$line =~ /[1-9]/
Ja si myslim, ze je to to iste, ale kupodivu neni:-)
A ono to funguje aj v Groovy. Chybne som myslel, ze v Groovy sa pouziva namiesto perlovskeho operatora =~ operator ==~ Ale je to tam takisto ako v Perle t.j. =~
Dokumentacia k tomu hovori toto:
Groovy also supports the =~ (create Matcher) and ==~ (matches regex) operators.
....
Since a Matcher coerces to a boolean by calling its find method, the =~ operator is consistent with the simple use of Perl's =~ operator, when it appears as a predicate (in 'if', 'while', etc.). The "stricter-looking" ==~ operator requires an exact match of the whole subject string.