Vlákno názorů k článku Groovy v příkladech: objektově orientované programování od MikRom - Groovy ma aj regularne vyrazy, tak ma napadlo,...

  • Článek je starý, nové názory již nelze přidávat.
  • 11. 1. 2008 14:47

    MikRom (neregistrovaný)
    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:-)
  • 11. 1. 2008 15:46

    MikRom (neregistrovaný)
    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.