Fungsi IsMatch, Match, dan MatchAll
Berlaku untuk: Aplikasi kanvas CLI Aplikasi Power Pages Power Platform berdasarkan model
Menguji kecocokan atau mengekstrak bagian dari string teks berdasarkan pola.
KETERANGAN
Fungsi IsMatch akan menguji apakah string teks sesuai dengan pola yang terdiri dari karakter biasa, pola yang telah ditentukan sebelumnya, atau ekspresi reguler. Fungsi Match dan MatchAll mengembalikan apa yang cocok, termasuk sub-kecocokan.
Gunakan IsMatch untuk memvalidasi apa yang diketik pengguna dalam kontrol Input teks. Misalnya, Anda dapat mengonfirmasi apakah pengguna telah memasukkan alamat email yang valid sebelum hasil disimpan ke sumber data. Jika entri tidak sesuai dengan kriteria Anda, tambahkan kontrol lain yang mendorong pengguna untuk memperbaiki entri.
Gunakan Kecocokan untuk mengekstrak string teks pertama yang cocok dengan pola dan MatchAll untuk mengekstrak semua string teks yang sesuai. Anda juga dapat mengekstrak sub-kecocokan untuk mengurai string kompleks.
Match mengembalikan rekaman informasi untuk kecocokan pertama yang ditemukan, dan MatchAll mengembalikan tabel rekaman untuk setiap kecocokan yang ditemukan. Rekaman tersebut atau rekaman berisi:
Column | Tipe | Description |
---|---|---|
sub-match bernama atau sub-match | SMS | Masing-masing sub-kecocokan bernama akan memiliki kolomnya sendiri. Buat sub-kecocokan bernama menggunakan (?<nama>...) dalam ekspresi reguler. Jika sub-kecocokan bernama memiliki nama yang sama dengan salah satu kolom yang ditentukan sebelumnya (di bawah), sub-kecocokan akan didahulukan, dan peringatan akan dibuat. Untuk menghindari peringatan ini, ganti nama sub-kecocokan. |
Pertandingan Penuh | Teks | Semua string teks yang cocok. |
Mulai Pertandingan | Nomor | Posisi awal kecocokan dalam string teks input. Karakter pertama string menghasilkan 1. |
SubPertandingan | Tabel kolom tunggal Teks (Nilai kolom) | Tabel subkecocokan bernama dan tidak bernama dalam urutan yang ditampilkan dalam ekspresi reguler. Umumnya, nama sub-kecocokan lebih mudah digunakan dan didorong untuk digunakan. Gunakan fungsi ForAll atau fungsi Last( FirstN( ... ) ) untuk bekerja dengan sub-kecocokan individu. Jika tidak ada sub-kecocokan yang didefinisikan dalam ekspresi reguler, tabel ini akan tersedia, tetapi kosong. |
Fungsi ini mendukung MatchOptions. Secara default:
- Fungsi ini melakukan pencocokan peka huruf besar kecil. Gunakan MatchOptions.IgnoreCase untuk melakukan pencocokan yang tidak peka huruf besar/kecil.
- IsMatch cocok dengan seluruh string teks (Complete MatchOption), sementara Match dan MatchAll mencari kecocokan di mana saja dalam string teks (Contains MatchOption). Gunakan Complete, Contains, BeginsWith, atau EndsWith yang sesuai untuk skenario Anda.
IsMatch mengembalikan true jika string teks cocok dengan pola atau false jika tidak. Cocok mengembalikan kosong jika tidak ada kecocokan yang dapat diuji dengan fungsi IsBlank . MatchAll mengembalikan tabel kosong jika tidak ada kecocokan yang dapat diuji dengan fungsi IsEmpty .
Jika Anda menggunakan MatchAll untuk memisahkan string teks, pertimbangkan menggunakan fungsi Split yang lebih cepat dan lebih mudah digunakan.
Pola
Kunci untuk menggunakan fungsi ini adalah dalam menggambarkan pola yang sesuai. Anda menggambarkan pola dalam string teks sebagai kombinasi dari:
- Karakter biasa, seperti "abc" atau "123".
- Pola yang telah ditentukan sebelumnya, seperti Letter, MultipleDigits, atau Email. (Enum Match menentukan pola ini.)
- Kode ekspresi reguler, misalnya "\d+\s+\d+" or "[a-z]+".
Gabungkan elemen-elemen ini dengan menggunakan operator string-concatenation&. Misalnya, "abc" & Digit & "\s+"adalah pola valid yang cocok dengan karakter "a", "b", dan "c", diikuti oleh digit dari 0 hingga 9, diikuti oleh setidaknya satu karakter spasi.
Karakter biasa
Pola yang paling sederhana adalah urutan karakter biasa yang akan dicocokkan dengan tepat.
Misalnya, bila digunakan dengan fungsi IsMatch, string "Hello" cocok dengan pola Hello secara persis. Tidak lebih dan tidak kurang. String "hello!" tidak cocok dengan pola karena tanda seru di akhir dan karena kasus salah untuk huruf "h". (Lihat MatchOptions untuk mengetahui cara memodifikasi perilaku ini.)
Dalam bahasa pola, karakter tertentu dicadangkan untuk tujuan khusus. Untuk menggunakan karakter ini, baik awalan karakter dengan \ (garis miring terbalik) untuk menunjukkan bahwa karakter harus diambil secara harfiah, atau gunakan salah satu pola yang telah ditentukan sebelumnya yang dijelaskan nanti dalam topik ini. Tabel ini berisi daftar karakter khusus:
Karakter khusus | Description |
---|---|
. | tanda titik |
? | tanda tanya |
* | tanda bintang |
+ | plus |
( ) | tanda kurung |
[ ] | tanda kurung siku |
{ } | tanda kurung kurawal |
^ | caret |
$ | tanda dolar |
| | panel atau pipa vertikal |
\ | garis miring terbalik |
Misalnya, Anda dapat mencocokkan "hello?" dengan menggunakan pola "Hello\?" dengan backslash sebelum tanda tanya.
Pola yang ditentukan sebelumnya
Pola yang ditentukan sebelumnya memberikan cara mudah untuk mencocokkan salah satu dari rangkaian karakter atau urutan beberapa karakter. Gunakan operator string-concatenation & untuk menggabungkan string teks Anda sendiri dengan anggota enum Match:
Enum kecocokan | KETERANGAN | Ekspresi reguler |
---|---|---|
Setiap | Mencocokkan karakter apa pun. | . |
Koma | Mencocokkan koma. | , |
Jari | Mencocokkan satu digit ("0" hingga "9"). | \d |
Mencocokkan alamat email yang berisi simbol "pada" ("@") dan nama domain yang berisi titik (".") | .+\@.+\\.[^\\.]{2,} |
|
Tanda hubung | Mencocokkan tanda hubung. | \- |
Kiri Paren | Mencocokkan tanda kurung kiri "(". | \( |
Surat | Mencocokkan huruf. | \p{L} |
Beberapa Digit | Mencocokkan satu atau beberapa digit. | \d+ |
Beberapa Huruf | Mencocokkan satu atau beberapa huruf. | \p{L}+ |
MultipleNonSpaces | Mencocokkan satu atau beberapa karakter yang tidak menambahkan spasi (bukan spasi, tab, atau baris baru). | \S+ |
MultipleSpaces | Mencocokkan satu atau beberapa karakter yang menambahkan spasi (bukan spasi, tab, atau baris baru). | \s+ |
Bukan Ruang | Cocok dengan satu karakter yang tidak menambahkan spasi. | \S |
Digit Opsional | Mencocokkan nol, satu, atau beberapa digit. | \d* |
OpsionalLetters | Mencocokkan nol, satu, atau beberapa huruf. | \p{L}* |
OptionalNonSpaces | Mencocokkan nol, satu, atau beberapa karakter yang tidak menambahkan spasi. | \S* |
Ruang Opsional | Mencocokkan nol, satu, atau beberapa karakter yang menambahkan spasi. | \s* |
Masa | Mencocokkan tanda titik ("."). | \. |
Kanan Paren | Mencocokkan tanda kurung kanan ")". | \) |
Antariksa | Mencocokkan karakter yang menambahkan spasi. | \s |
Tab | Cocok dengan karakter tab. | \t |
Misalnya, pola "A" & MultipleDigits akan cocok dengan huruf "A" diikuti oleh satu atau lebih digit.
Ekspresi reguler
Pola yang digunakan fungsi ini adalah ekspresi reguler. Karakter biasa dan pola standar yang dijelaskan sebelumnya dalam topik membantu membuat ekspresi reguler.
Ekspresi reguler sangat kuat, tersedia dalam banyak bahasa pemrograman, dan digunakan untuk berbagai keperluan. Ekspresi ini juga dapat sering terlihat seperti urutan tanda baca acak. Artikel ini tidak menjelaskan semua aspek ekspresi reguler, namun banyak informasi, tutorial, dan alat tersedia di web.
Ekspresi reguler tersedia dalam dialek yang berbeda, dan Power Apps menggunakan varian dari dialek JavaScript. Lihat sintaks ekspresi reguler untuk pengantar sintaks. Sub-kecocokan bernama (terkadang disebut sebagai grup pengambilan gambar) didukung:
- Sub-kecocokan bernama: (?<name> ...)
- Back reference bernama: \k<name>
Di tabel enum Kecocokan sebelumnya di topik ini, setiap enum akan ditampilkan di baris yang sama seperti ekspresi reguler yang sesuai.
Opsi kecocokan
Anda dapat memodifikasi perilaku fungsi-fungsi ini dengan menentukan satu atau beberapa opsi, yang dapat Anda gabungkan dengan menggunakan operator penggabungan string (&).
Enum MatchOptions | Description | Dampak pada ekspresi reguler |
---|---|---|
MatchOptions.BeginsWith | Pola harus cocok dari awal teks. | Menambahkan ^ ke awal ekspresi reguler. |
MatchOptions.Selesai | Default untuk IsMatch. Pola harus cocok dengan keseluruhan string teks, mulai dari awal hingga akhir. | Menambahkan ^ ke awal dan $ ke akhir ekspresi reguler. |
MatchOptions.Contains | Default untuk Match dan MatchAll. Pola harus muncul di suatu tempat dalam teks namun tidak perlu memulai atau mengakhirinya. | Tidak mengubah ekspresi reguler. |
MatchOptions.EndsWith | Pola harus cocok dengan bagian akhir string teks. | Menambahkan $ ke akhir ekspresi reguler. |
MatchOptions.Abaikan Kasus | Memperlakukan huruf besar dan huruf kecil sebagai sama. Secara default, pencocokan peka huruf besar-kecil. | Tidak mengubah ekspresi reguler. Pilihan ini setara dengan pengubah "i" standar untuk ekspresi reguler. |
MatchOptions.Multiline | Mencocokkan di beberapa baris. | Tidak mengubah ekspresi reguler. Pilihan ini setara dengan pengubah "m" standar untuk ekspresi reguler. |
Menggunakan MatchAll setara dengan menggunakan pengubah "g" standar untuk ekspresi reguler.
Sintaks
IsMatch(Teks,Pola [, Opsi])
- Teks – Wajib. String teks yang akan diuji.
- Pola – Wajib. Pola yang akan diuji sebagai string teks. Rangkai pola yang telah ditetapkan sebelumnya yang menetapkan enum Kecocokan, atau berikan ekspresi reguler. Pola harus berupa rumus konstan tanpa variabel, sumber data, atau referensi dinamis lainnya yang berubah saat aplikasi berjalan.
- Opsi – Opsional. Kombinasi string teks nilai enum MatchOptions. Secara default, MatchOptions.Complete digunakan.
Cocok( Teks,Pola [, Opsi ])
- Teks – Wajib. String teks yang akan dicocokkan.
- Pola – Wajib. Pola yang akan dicocokkan sebagai string teks. Rangkai pola yang telah ditetapkan sebelumnya yang menetapkan enum Kecocokan, atau berikan ekspresi reguler. Pola harus berupa rumus konstan tanpa variabel, sumber data, atau referensi dinamis lainnya yang berubah saat aplikasi berjalan.
- Opsi – Opsional. Kombinasi string teks nilai enum MatchOptions. Secara default, MatchOptions.Contains digunakan.
MatchAll(Teks,Pola [, Opsi])
- Teks – Wajib. String teks yang akan dicocokkan.
- Pola – Wajib. Pola yang akan dicocokkan sebagai string teks. Rangkai pola yang telah ditetapkan sebelumnya yang menetapkan enum Kecocokan, atau berikan ekspresi reguler. Pola harus berupa rumus konstan tanpa variabel, sumber data, atau referensi dinamis lainnya yang berubah saat aplikasi berjalan.
- Opsi – Opsional. Kombinasi string teks nilai enum MatchOptions. Secara default, MatchOptions.Contains digunakan.
Contoh IsMatch
Karakter biasa
Bayangkan bahwa aplikasi Anda berisi kontrol Input teks bernama TextInput1. Pengguna memasukkan nilai ke kontrol ini untuk disimpan dalam database.
Pengguna mengetik Hello world ke TextInput1.
Rumus | KETERANGAN | Hasil |
---|---|---|
IsMatch( TextInput1.Text, "Hello world" ) |
Uji apakah input pengguna cocok, persis, string "Hello world". | benar |
IsMatch( TextInput1.Text, "Good bye" ) |
Uji apakah input pengguna cocok, persis, string "Good bye". | palsu |
IsMatch( TextInput1.Text, "hello", Contains ) |
Uji apakah input pengguna berisi kata "hello" (peka huruf besar-kecil). | palsu |
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) |
Uji apakah input pengguna berisi kata "hello" (tidak peka huruf besar-kecil). | benar |
Pola yang ditentukan sebelumnya
Rumus | KETERANGAN | Hasil |
---|---|---|
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) |
Mencocokkan Nomor Jaminan Sosial Amerika Serikat | benar |
IsMatch( "joan@contoso.com", Email ) |
Mencocokkan Alamat email | benar |
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) |
Mencocokkan urutan digit, tanda titik, dan kemudian angka nol atau digit lainnya. | benar |
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) |
Mencocokkan urutan digit, tanda titik, dan kemudian angka nol atau digit lainnya. Tanda titik tidak muncul di teks yang akan dicocokkan, sehingga pola ini tidak cocok. | palsu |
Ekspresi reguler
Rumus | KETERANGAN | Hasil |
---|---|---|
IsMatch( "986", "\d+" ) |
Mencocokkan nilai bilangan bulat lebih dari nol. | benar |
IsMatch( "1.02", "\d+(\.\d\d)?" ) |
Mencocokkan jumlah mata uang positif. Jika input berisi titik desimal, input juga harus berisi dua karakter numerik setelah titik desimal. Misalnya, 3,00 berlaku, namun 3,1 tidak. | benar |
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) |
Mencocokkan jumlah mata uang positif atau negatif. Jika input berisi titik desimal, input juga harus berisi dua karakter numerik setelah titik desimal. | benar |
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) |
Mencocokkan nomor Jaminan Sosial Amerika Serikat. Memvalidasi format, jenis, dan panjang dari bidang input yang tersedia. String yang akan dicocokkan harus terdiri dari tiga karakter numerik diikuti tanda hubung, lalu dua karakter numerik diikuti tanda hubung, lalu empat karakter numerik. | benar |
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) |
Sama seperti contoh sebelumnya, namun salah satu tanda hubung keluar tidak pada tempatnya di input. | palsu |
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) |
Memvalidasi sandi yang kuat, yang harus berisi delapan, sembilan, atau 10 karakter, di samping setidaknya satu digit dan setidaknya satu karakter alfabet. String tidak boleh berisi karakter khusus. | palsu |
Contoh Match dan MatchAll
Rumus | KETERANGAN | Hasil |
---|---|---|
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" |
Mengekstrak hanya bagian email dari informasi kontak. | { email: "bob.jones@contoso.com", FullMatch: "<bob.jones@contoso.com>", SubMatches: [ "bob.jones@contoso.com" ], StartMatch: 11 } |
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" |
Mengekstrak hanya bagian email dari informasi kontak. Tidak ada alamat hukum yang ditemukan (tidak ada tanda @), sehingga fungsi menghasilkan blank. | Kosong |
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) |
Mengekstrak bagian bahasa, skrip, dan wilayah dari tag bahasa yang dihasilkan fungsi Language. Hasil ini mencerminkan Amerika Serikat; lihat dokumentasi fungsi Language untuk contoh lainnya. Karakter grup operator (?: tanpa membuat sub-kecocokan lain. | { language: "en", script: blank, region: "US", FullMatch: "en-US", SubMatches: [ "en", "", "US" ], StartMatch: 1 } |
Match( "PT2H1M39S", "PT(?:<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) |
Mengekstrak jam, menit, dan detik dari nilai durasi ISO 8601. Nomor yang diekstrak masih dalam string teks; gunakan fungsi Value untuk mengonversinya ke angka sebelum operasi matematika dilakukan padanya. | { hours: "2", minutes: "1", seconds: "39", FullMatch: "PT2H1M39S", SubMatches:["2","1","39"], StartMatch: 1 } |
Mari telusuri contoh terakhir. Jika Anda ingin mengonversi string ini ke nilai tanggal/waktu menggunakan fungsi Time, Anda harus meneruskan dalam sub-kecocokan bernama secara terpisah. Untuk melakukannya, Anda dapat menggunakan fungsi With yang beroperasi pada rekaman yang menghasilkan Kecocokan:
With(
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
Time( Value( hours ), Value( minutes ), Value( seconds ) )
)
Untuk contoh ini, tambahkan kontrol Tombol, atur properti OnSelect ke rumus ini, lalu pilih tombol:
Set( pangram, "The quick brown fox jumps over the lazy dog." )
Rumus | KETERANGAN | Hasil |
---|---|---|
Match( pangram, "THE", IgnoreCase ) |
Cari semua kecocokan "THE" dalam string teks yang berisi variabel pangram. String berisi dua kecocokan, namun hanya yang pertama yang dihasilkan karena Anda menggunakan Match dan bukan MatchAll. Kolom SubMatches kosong karena tidak ada sub-kecocokan yang ditentukan. | { FullMatch: "The", SubMatches: [ ], StartMatch: 32 } |
MatchAll( pangram, "the" ) |
Cari semua kecocokan "the" dalam string teks yang berisi variabel pangram. Pengujian peka terhadap huruf besar-kecil, sehingga hanya instans kedua "the" yang ditemukan. Kolom SubMatches kosong karena tidak ada sub-kecocokan yang ditentukan. | |
MatchAll( pangram, "the", IgnoreCase ) |
Cari semua kecocokan "the" dalam string teks yang berisi variabel pangram. Dalam kasus ini, pengujian tidak peka terhadap huruf besar-kecil, sehingga kedua instans dari kata tersebut ditemukan. Kolom SubMatches kosong karena tidak ada sub-kecocokan yang ditentukan. | |
MatchAll( pangram, "\b\wo\w\b" ) |
Menemukan semua kata tiga huruf dengan "o" di tengah. Perhatikan bahwa "brown" dikecualikan karena bukan kata tiga huruf dan, karenanya, gagal mencocokkan "\b" (word boundary). | |
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) |
Mencocokkan semua karakter antara "fox" dan "dog". | { antara: "jumps over the lazy", FullMatch: "fox jumps over the lazy dog", SubMatches: [ "jumps over the lazy" ], StartMatch: 17 } |
Untuk melihat hasil MatchAll di Galeri:
Di layar kosong, masukkan kontrol Galeri vertikal kosong.
Atur properti Item galeri ke MatchAll( pangram, "\w+" ) atau MatchAll( pangram, MultipleLetters ).
Pilih "Tambahkan item dari tab Insert" di bagian tengah kontrol galeri untuk memilih template galeri.
Tambahkan kontrol Label ke template galeri.
Atur properti Teks label ke ThisItem.FullMatch.
Galeri diisi dengan setiap kata dalam contoh teks kami. Ubah ukuran template galeri dan kontrol label agar dapat melihat semua kata tersebut dalam satu layar.