Tout d'abord, vous mélangez les expressions rationnelles et les chaînes de caractères dans les tableaux. Je vous suggère de les avoir dans des listes séparées. Deuxièmement, faites attention aux chaînes de caractères groovy slashy.
J'ai modifié votre code pour que vous puissiez voir cordes slashy (amazon.co.*, www.scala-lang.org, google.co.uk) sont en fait interprétés comme des chaînes de caractères et non comme des regex comme prévu.
Et dans votre cas, puisque vous mélangez regex et chaînes de caractères dans des tableaux, la vérification doit être faite différemment :
def ignoredSites = ["www.amazon.com", /amazon.co.*/, /www.scala-lang.org/,/google.co.uk/, ~/htt(p|ps):\/\/www\.amazon\.co.*/, "groovy-lang.org"]
def sites = ["amazon.co.uk", ~/groo{2}vy-lang\.org/, "google.co.uk", "amazon.com", ~/scala.*/]
println '==========sites============'
sites.each { site ->
println site.toString() + " == "+ site.class
}
println '==========ignoredSites============'
ignoredSites.each { site ->
println site.toString() + " == "+ site.class
}
println '======================'
sites.each { site ->
if(site.class.equals(java.util.regex.Pattern)){
ignoredSites.each{ is ->
if(is.class.equals(java.lang.String)){
if(is.matches(site)) println("Ignored: ${site}") //string = regex
} else {
//can't match 2 regex
}
}
} else {
ignoredSites.each{ is ->
if(is.class.equals(java.lang.String)){
if(is.equals(site)) println("Ignored: ${site}") //string = regex
} else {
if(site.matches(is)) println("Ignored3: ${site}") //string = regex
}
}
}
}
Modifié
Si vous exécutez le code, en imprimant les types d'éléments, vous remarquerez la chose suivante :
==========sites============
amazon.co.uk == class java.lang.String
groo{2}vy-lang\.org == class java.util.regex.Pattern
google.co.uk == class java.lang.String
amazon.com == class java.lang.String
scala.* == class java.util.regex.Pattern
==========ignoredSites============
www.amazon.com == class java.lang.String
amazon.co.* == class java.lang.String
www.scala-lang.org == class java.lang.String
google.co.uk == class java.lang.String
htt(p|ps)://www\.amazon\.co.* == class java.util.regex.Pattern
groovy-lang.org == class java.lang.String
======================
Ainsi, amazon.co.uk ne correspond pas, car l'expression régulière qui devrait le faire correspondre :
amazon.co.* == class java.lang.String
est interprété comme un String par le groovy, à cause des strings slashy. D'un autre côté
groo{2}vy-lang\.org == class java.util.regex.Pattern
est une regex, mais {2}
dans celui-ci, signifie que o apparaît exactement 2 fois. En bref, groo{2}vy-lang\.org
correspondra à grooovy-lang.org
(notez trois o là-dedans).