Pencocokan Pola dalam String di Groovy

1. Ikhtisar

Pada artikel ini, kita akan melihat fitur bahasa Groovy untuk pencocokan pola di Strings.

Kita akan melihat bagaimana pendekatan Groovy yang disertakan dengan baterai memberi kita sintaks yang kuat dan ergonomis untuk kebutuhan pencocokan pola dasar kita.

2. Operator Pola

Bahasa Groovy memperkenalkan apa yang disebut operator pola ~ . Operator ini dapat dianggap sebagai pintasan gula sintaksis ke metode java.util.regex.Pattern.compile (string) Java .

Mari kita lihat dalam praktik sebagai bagian dari tes Spock :

def "pattern operator example"() { given: "a pattern" def p = ~'foo' expect: p instanceof Pattern and: "you can use slashy strings to avoid escaping of blackslash" def digitPattern = ~/\d*/ digitPattern.matcher('4711').matches() }

Ini juga cukup nyaman, tetapi kita akan melihat bahwa operator ini hanyalah dasar untuk beberapa operator lain yang bahkan lebih berguna.

3. Operator Pertandingan

Sebagian besar waktu, dan terutama saat menulis tes, kami tidak terlalu tertarik untuk membuat objek Pola , tetapi, ingin memeriksa apakah String cocok dengan ekspresi reguler (atau Pola ) tertentu. Groovy, oleh karena itu, juga berisi operator pencocokan == ~ .

Ini mengembalikan boolean dan melakukan kecocokan ketat terhadap ekspresi reguler yang ditentukan. Pada dasarnya, ini adalah pintasan sintaksis untuk memanggil Pattern.matches (regex, string) .

Sekali lagi, kami akan memeriksanya dalam praktik sebagai bagian dari tes Spock :

def "match operator example"() { expect: 'foobar' ==~ /.*oba.*/ and: "matching is strict" !('foobar' ==~ /foo/) }

4. Temukan Operator

Operator Groovy terakhir dalam konteks pencocokan pola adalah operator find ~ = . Dalam kasus ini, operator akan langsung membuat dan mengembalikan instance java.util.regex.Matcher .

Kita dapat bertindak atas instance Matcher ini , tentu saja, dengan mengakses metode API Java yang dikenal. Namun sebagai tambahan, kami juga dapat mengakses grup yang cocok menggunakan larik multi-dimensi.

Dan itu belum semuanya - instance Matcher akan secara otomatis memaksa ke tipe boolean dengan memanggil metode find () jika digunakan sebagai predikat. Mengutip dokumen resmi Groovy, ini berarti “operator = ~ konsisten dengan penggunaan sederhana dari Perl's = ~ operator”.

Di sini, kita melihat operator beraksi:

def "find operator example"() { when: "using the find operator" def matcher = 'foo and bar, baz and buz' =~ /(\w+) and (\w+)/ then: "will find groups" matcher.size() == 2 and: "can access groups using array" matcher[0][0] == 'foo and bar' matcher[1][2] == 'buz' and: "you can use it as a predicate" 'foobarbaz' =~ /bar/ }

5. Kesimpulan

Kami telah melihat bagaimana bahasa Groovy memberi kami akses ke fitur Java bawaan terkait ekspresi reguler dengan cara yang sangat nyaman.

Dokumentasi resmi Groovy juga berisi beberapa contoh ringkas tentang topik ini. Ini sangat keren jika Anda menganggap bahwa contoh kode di dokumen dijalankan sebagai bagian dari pembuatan dokumentasi.

Seperti biasa, contoh kode dapat ditemukan di GitHub.