Kongsi melalui


Fungsi IsMatch, Match dan MatchAll

Digunakan untuk: Aplikasi kanvas Apl Power Pages Power Platform berpandukan model CLI

Ujian untuk padanan atau mengekstrak bahagian rentetan teks berdasarkan corak.

Penerangan

Fungsi IsMatch menguji sama ada rentetan teks sepadan dengan corak yang boleh terdiri daripada aksara biasa, corak pratakrif atau ungkapan biasa. Fungsi Match dan MatchAll mengembalikan perkara yang dipadankan termasuk subpadanan.

Gunakan IsMatch untuk mengesahkan perkara yang pengguna telah taip dalam kawalan Input teks. Sebagai contoh, anda boleh mengesahkan sama ada pengguna telah memasukkan alamat e-mel yang sah sebelum hasilnya disimpan ke dalam sumber data anda. Jika entri tidak sepadan dengan kriteria anda, tambahkan kawalan lain yang menggesa pengguna membetulkan entri itu.

Gunakan Match untuk mengekstrak rentetan teks pertama yang sepadan dengan corak dan MatchAll untuk mengekstrak semua rentetan teks yang sepadan. Anda juga boleh mengekstrak subpadanan untuk menguraikan rentetan kompleks.

Match mengembalikan rekod maklumat untuk padanan pertama yang ditemui dan MatchAll mengembalikan jadual rekod untuk setiap padanan yang ditemui. Rekod atau rekod mengandungi:

Column Taip Description
dinamakan subpadanan atau subpadanan Teks Setiap subpadanan yang dinamakan akan mempunyai lajurnya sendiri. Cipta subpadanan yang dinamakan dengan menggunakan (?<nama>...) dalam ungkapan biasa. Jika subpadanan yang dinamakan mempunyai bernama mempunyai nama yang sama dengan salah satu daripada lajur yang dipratakrif (di bawah), subpadanan diutamakan dan amaran dijana. Untuk mengelakkan amaran ini, namakan semula subpadanan.
FullMatch Teks Semua rentetan teks yang dipadankan.
StartMatch Nombor Kedudukan permulaan bagi padanan dalam rentetan teks input. Aksara pertama rentetan akan mengembalikan 1.
SubPadanan Jadual lajur tunggal bagi Teks (Nilai lajur) Jadual subpadanan yang dinamakan dan tidak dinamakan mengikut urutan yang mana mereka muncul dalam ungkapan biasa. Secara umumnya, subpadanan yang dinamakan lebih senang dikendalikan dan digalakkan. Gunakan fungsi ForAll atau fungsi Last( FirstN( ... ) ) untuk bekerja dengan subpadanan individu. Jika tidak ada subpadanan yang ditakrifkan dalam ungkapan biasa, jadual ini akan wujud tetapi kosong.

Fungsi ini menyokong MatchOptions. Secara lalai:

  • Fungsi ini melaksanakan padanan sensitif huruf. Gunakan MatchOptions.IgnoreCase untuk melaksanakan padanan kes yang tidak sensitif.
  • IsMatch padan dengan keseluruhan rentetan teks (Lengkap MatchOption), manakala carian Match dan MatchAll untuk padanan di mana-mana sahaja dalam rentetan teks (Mengandungi MatchOption). Gunakan Lengkap, Mengandungi, BeginsWith atau EndsWith sesuai untuk senario anda.

IsMatch mengembalikan benar jika rentetan teks sepadan dengan corak atau palsu jika ia tidak. Match mengembalikan kosong jika tiada padanan ditemui yang boleh diuji dengan fungsi IsBlank. MatchAll mengembalikan jadual kosong jika tidak ada padanan yang boleh diuji dengan fungsi IsEmpty.

Jika anda menggunakan MatchAll untuk memisahkan rentetan teks, pertimbangkan untuk menggunakan fungsi Split yang lebih mudah digunakan dan lebih pantas.

Corak

Kunci untuk menggunakan fungsi ini adalah dengan memerihalkan corak yang sepadan. Anda memerihalkan corak dalam rentetan teks sebagai gabungan:

  • Aksara biasa, seperti "abc" atau "123".
  • Corak yang dipratakrif, seperti Surat, MultipleDigits atau E-mel. (Penghitungan Padanan mentakrifkan corak ini.)
  • Kod ungkapan biasa seperti "\d+\s+\d+" atau "[a-z]+".

Gabungkan unsur-unsur ini dengan menggunakan operator penyambungan rentetan&. Contohnya, "abc" & Digit & "\s+" ialah corak sah yang sepadan dengan aksara "a", "b", dan "c", diikuti dengan digit daripada 0 kepada 9, diikuti dengan sekurang-kurangnya satu aksara ruang putih.

Aksara biasa

Corak termudah adalah jujukan aksara biasa yang dipadankan dengan tepat.

Sebagai contoh, apabila digunakan dengan fungsi IsMatch, rentetan "Helo" sepadan dengan corak "Helo" secara tepat. Tiada lebih dan tiada kurang. Rentetan "helo!" tidak sepadan dengan corak kerana titik seru di hujung dan kerana kes salah untuk huruf "h". (Lihat MatchOptions untuk cara bagi mengubah suai tingkah laku.)

Dalam bahasa corak, aksara tertentu dikhaskan untuk tujuan khas. Untuk menggunakan aksara ini, sama ada letakkan awalan pada aksara dengan \ (miring balik) untuk menunjukkan bahawa aksara harus diambil secara literal atau gunakan salah satu corak yang dipratakrif kemudian dalam topik ini. Jadual ini menyenaraikan aksara khas:

Aksara khas Description
. titik atau noktah
? tanda soal
* asterisk
+ campur
( ) kurungan
[ ] kurungan berpetak
{ } tanda kurung ikal
^ karet
$ tanda dolar
| bar atau paip menegak
\ miring balik

Contohnya, anda boleh memadankan "Helo?" dengan menggunakan corak "Helo\?" dengan miring balik sebelum tanda soal.

Corak dipratakrif

Corak yang dipratakrif menyediakan cara mudah untuk padanan sama ada salah satu daripada sekumpulan aksara atau urutan berbilang aksara. Gunakan operator penyambungan rentetan& untuk menggabungkan rentetan teks anda sendiri dengan ahli enum Padan :

Padankan enum Penerangan Pernyataan biasa
Any Padankan sebarang aksara. .
Comma Padankan koma. ,
Digit Padankan digi tunggal ("0" melalui "9"). \d
Email Memadankan alamat e-mel yang mengandungi simbol "at" ("@") dan nama domain yang mengandungi titik (".") .+\@.+\\.[^\\.]{2,}
Hyphen Padankan tanda sempang. \-
LeftParen Padankan kiri tanda kurung "(". \(
Letter Padankan huruf. \p{L}
MultipleDigits Padankan satu atau lebih digit. \d+
MultipleLetters Padankan satu atau lebih huruf. \p{L}+
MultipleNonSpaces Padankan satu atau lebih aksara yang tidak menambah ruang kosong (bukan ruang, tab atau baris baharu). \S+
MultipleSpaces Padankan satu atau lebih aksara yang menambah ruang kosong (ruang, tab atau baris baharu). \s+
NonSpace Padankan aksara tunggal yang tidak menambah ruang kosong. \S
OptionalDigits Padankan sifar, satu atau lebih digit. \d*
OptionalLetters Padankan sifar, satu atau lebih huruf. \p{L}*
OptionalNonSpaces Padankan sifar, satu atau lebih aksara yang tidak menambah ruang kosong. \S*
OptionalSpaces Padankan sifar, satu atau lebih aksara yang menambah ruang kosong. \s*
Period Padankan tempoh atau titik ("."). \.
RightParen Padankan kanan tanda kurung "(". \)
Space Padankan aksara yang menambah ruang kosong. \s
Tab Sepadan dengan aksara tab. \t

Sebagai contoh, corak "A" & MultipleDigits akan sepadan dengan huruf "A" diikuti dengan satu atau lebih digit.

Ungkapan biasa

Corak yang fungsi ini gunakan adalah ungkapan biasa. Aksara biasa dan corak pratakrif yang diterangkan lebih awal dalam topik ini membantu membina ungkapan biasa.

Ungkapan biasa adalah sangat mantap, tersedia dalam banyak bahasa pengaturcaraan dan digunakan untuk pelbagai tujuan yang meluas. Ia juga sering kelihatan seperti jujukan rawak tanda baca. Artikel ini tidak menerangkan semua aspek ungkapan biasa tetapi banyak maklumat, tutorial dan alat tersedia pada web.

Ungkapan biasa terdapat dalam pelbagai dialek dan Power Apps menggunakan dialek JavaScript. Lihat sintaks ungkapan biasa untuk pengenalan kepada sintaks. Subpadanan yang dinamakan (kadang-kadang dipanggil kumpulan rakaman yang bernama) adalah disokong:

  • Subpadanan yang dinamakan: (?<nama> ...)
  • Rujukan balik yang dinamakan: \k<nama>

Dalam jadual Match enum lebih awal dalam topik ini, setiap enum akan muncul dalam baris yang sama dengan ungkapan biasa yang sepadan.

Pilihan padanan

Anda boleh mengubah suai kelakuan fungsi ini dengan menentukan satu atau lebih opsyen, yang boleh anda gabungkan menggunakan operator penyambungan rentetan (&&).

MatchOptions enum Description Kesan ke atas ungkapan biasa
MatchOptions.BeginsWith Corak mestilah padan dari awal teks. Tambah ^ hingga permulaan ungkapan biasa.
MatchOptions.Complete Lalai untuk IsMatch. Corak mesti padan dengan keseluruhan rentetan teks, dari awal sehingga akhir. Tambah ^ pada permulaan $ sehingga akhir ungkapan biasa.
MatchOptions.Mengandungi Lalai untuk Match and MatchAll. Corak mesti muncul di suatu tempat dalam teks tetapi tidak perlu memulakan atau mengakhirinya. Tidak mengubah suai ungkapan biasa.
MatchOptions.EndsWith Corak mesti sepadan dengan hujung rentetan teks. Tambah $ hingga akhir ungkapan biasa.
MatchOptions.IgnoreCase Memperlakukan huruf besar dan huruf kecil sama. Pemadanan adalah sensitif huruf secara lalai. Tidak mengubah suai ungkapan biasa. Pilihan ini adalah setara dengan pengubah suai standard "i" untuk ungkapan biasa.
MatchOptions.Multiline Padankan merentasi pelbagai baris. Tidak mengubah suai ungkapan biasa. Pilihan ini adalah setara dengan pengubah suai standard "m" untuk ungkapan biasa.

Menggunakan MatchAll adalah setara dengan menggunakan pengubahsuai standard "g" untuk ungkapan biasa.

Sintaks

IsMatch( Teks, Corak [, Pilihan ] )

  • Teks – Diperlukan. Rentetan teks untuk diuji.
  • Corak – Diperlukan. Corak untuk diuji sebagai rentetan teks. Corak pratakrif perangkaian yang Match enum takrifkan atau menyediakan ungkapan biasa. Corak mestilah formula pemalar tanpa sebarang pemboleh ubah, sumber data atau rujukan dinamik lain yang berubah semasa aplikasi berjalan.
  • Opsyen – Pilihan. Gabungan rentetan teks dari nilai MatchOptions enum. Secara lalai, MatchOptions.Complete digunakan.

Match( Teks, Corak [, Pilihan ] )

  • Teks – Diperlukan. Rentetan teks untuk padanan.
  • Corak – Diperlukan. Corak untuk padanan sebagai rentetan teks. Corak pratakrif perangkaian yang Padanan enum takrifkan atau menyediakan ungkapan biasa. Corak mestilah formula pemalar tanpa sebarang pemboleh ubah, sumber data atau rujukan dinamik lain yang berubah semasa aplikasi berjalan.
  • Opsyen – Pilihan. Gabungan rentetan teks dari nilai MatchOptions enum. Secara lalai, MatchOptions.Contains digunakan.

MatchAll( Teks, Corak [, Pilihan ] )

  • Teks – Diperlukan. Rentetan teks untuk padanan.
  • Corak – Diperlukan. Corak untuk padanan sebagai rentetan teks. Corak pratakrif perangkaian yang Padanan enum takrifkan atau menyediakan ungkapan biasa. Corak mestilah formula pemalar tanpa sebarang pemboleh ubah, sumber data atau rujukan dinamik lain yang berubah semasa aplikasi berjalan.
  • Opsyen – Pilihan. Gabungan rentetan teks dari nilai MatchOptions enum. Secara lalai, MatchOptions.Contains digunakan.

Contoh IsMatch

Aksara biasa

Bayangkan bahawa aplikasi anda mengandungi kawalan Input teks yang dinamakan TextInput1. Pengguna memasukkan nilai ke dalam kawalan ini untuk disimpan dalam pangkalan data.

Jenis pengguna Helo dunia ke dalam TextInput1.

Formula Penerangan Hasil
IsMatch( TextInput1.Text, "Hello world" ) Menguji sama ada input pengguna padan, tepat, rentetan "Helo dunia". benar
IsMatch( TextInput1.Text, "Good bye" ) Menguji sama ada input pengguna padan, tepat, rentetan "Selamat tinggal". palsu
IsMatch( TextInput1.Text, "hello", Contains ) Menguji sama ada input pengguna mengandungi perkataan "helo" (sensitif huruf). palsu
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Menguji sama ada input pengguna mengandungi perkataan "helo" (tidak sensitif huruf). benar

Corak dipratakrif

Formula Penerangan Hasil
IsMatch( "123-45-7890", Digit & Digit & Digit & Hyphen & Digit & Digit & Hyphen & Digit & Digit & Digit & Digit ) Padankan Nombor Keselamatan Sosial Amerika Syarikat benar
IsMatch( "joan@contoso.com", Email ) Padankan alamat e-mel benar
IsMatch( "123.456", MultipleDigits & Period & OptionalDigits ) Padankan jujukan digit, tempoh dan kemudian sifar atau lebih digit. benar
IsMatch( "123", MultipleDigits & Period & OptionalDigits ) Padankan jujukan digit, tempoh dan kemudian sifar atau lebih digit. Titik tidak muncul dalam teks untuk dipadankan, jadi corak ini tidak sesuai. palsu

Ungkapan biasa

Formula Penerangan Hasil
IsMatch( "986", "\d+" ) Padakan integer yang lebih besar daripada sifar. benar
IsMatch( "1.02", "\d+(\.\d\d)?" ) Padankan jumlah mata wang positif. Jika input mengandungi titik perpuluhan, input juga mesti mengandungi dua aksara angka setelah titik perpuluhan. Sebagai contoh, 3.00 adalah sah, tetapi 3.1 tidak. benar
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Padankan jumlah mata wang positif atau negatif. Jika input mengandungi titik perpuluhan, input juga mesti mengandungi dua aksara angka setelah titik perpuluhan. benar
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Padankan Nombor Keselamatan Sosial Amerika Syarikat. Mengesahkan format, jenis dan panjang medan input yang dibekalkan. Rentetan untuk dipadankan mesti terdiri daripada tiga aksara nombor diikuti dengan tanda sengkang, kemudian dua aksara angka diikuti dengan tanda sengkang, dan kemudian empat aksara nombor. benar
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Sama seperti contoh sebelumnya, tetapi salah satu daripada tanda sempang berada di luar temat dalam input. palsu
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Mengesahkan kata laluan yang kuat, yang mesti mengandungi lapan, sembilan atau 10 aksara, selain itu sekurang-kurangnya satu digit dan sekurang-kurangnya satu aksara abjad. Rentetan tidak boleh mengandungi aksara khas. palsu

Contoh Padanan dan MatchAll

Formula Penerangan Hasil
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>" Hanya mengekstrak bahagian e-mel maklumat kenalan. {
e-mel: "bob.jones@contoso.com",
FullMatch: "<bob.jones@contoso.com>",
SubMatches: [ "bob.jones@contoso.com" ],
StartMatch: 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Hanya mengekstrak bahagian e-mel maklumat kenalan. Tidak ada alamat sah yang ditemui (tidak ada tanda @), sehingga fungsi kembali blank. kosong
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Mengekstrak bahagian bahasa, skrip dan rantau tag bahasa yang fungsi Language akan dikembalikan. Hasil ini menunjukkan Amerika Syarikat; lihat Language function documentation untuk lebih banyak contoh. (?: aksara kumpulan operator tanpa mencipta subpadanan 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, minit dan saat daripada nilai tempoh ISO 8601. Nombor yang diekstrak masih dalam rentetan teks; menggunakan fungsi Value untuk menukarnya menjadi nombor sebelum operasi matematik dilaksanakan di atasnya. {
hours: "2",
minutes: "1",
seconds: "39",
FullMatch: "PT2H1M39S",
SubPadanan:["2","1","39"],
StartMatch: 1
}

Mari kita teliti contoh terakhir. Jika anda ingin menukar rentetan ini kepada nilai tarikh/waktu menggunakan fungsi Time, anda mesti menghantar dalam subpadanan yang dinamakan secara individu. Untuk melakukan ini, anda boleh menggunakan fungsi With operasi pada rekod yang Padanan akan dikembalikan:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
   Time( Value( hours ), Value( minutes ), Value( seconds ) )
)

Untuk contoh ini, tambah kawalan Butang, tetapkan sifat OnSelect untuk formula ini, dan kemudian pilih butang:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Formula Penerangan Hasil
Match( pangram, "THE", IgnoreCase ) Cari semua padanan "THE" dalam rentetan teks yang pangram mengandungi pemboleh ubah. Rentetan mengandungi dua padanan, tetapi hanya yang pertama dikembalikan kerana anda menggunakan Match dan bukan MatchAll. Lajur SubPadanan kosong kerana tidak ditentukan sub-padanan yang ditakrifkan.. {
FullMatch: "The",
SubMatches: [ ],
StartMatch: 32
}
MatchAll( pangram, "the" ) Cari semua padanan "the" dalam rentetan teks yang pangram mengandungi pemboleh ubah. Ujian ini sensitif huruf, jadi hanya tika kedua "the" yang ditemui. Lajur SubPadanan kosong kerana tidak ditentukan sub-padanan yang ditakrifkan.. MatchAll untuk pangram.
MatchAll( pangram, "the", IgnoreCase ) Cari semua padanan "the" dalam rentetan teks yang pangram mengandungi pemboleh ubah. Dalam kes ini, ujian adalah kes tidak sensitif, jadi kedua-dua tika perkataan ditemui. Lajur SubPadanan kosong kerana tidak ditentukan sub-padanan yang ditakrifkan.. MatchAll dengan IgnoreCase.
MatchAll( pangram, "\b\wo\w\b" ) Mencari semua perkataan tiga huruf dengan huruf "o" di tengah. Perhatikan bahawa "coklat" dikecualikan kerana bukan perkataan tiga huruf dan, oleh itu, gagal untuk dipadankan "\ b" (batas kata). MatchAll untuk pangram dengan b, wo, w dan b.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Padamkan semua aksara antara "rubah" dan "anjing". {
antara: "jumps over the lazy",
FullMatch: "fox jumps over the lazy dog",
SubMatches: [ "jumps over the lazy" ],
StartMatch: 17
}

Untuk melihat MatchAll dalam galeri:

  1. Pada skrin kosong, sisipkan menegak kosong kawalan Galeri control.

  2. Tetapkan sifat Item untuk MatchAll( pangram, "\w+" ) atau MatchAll( pangram, BerbilangHuruf ).

    Galeri item.

  3. Pilih "Tambahkan item dari tab Sisipkan" di tengah-tengah kawalan galeri untuk memilih templat galeri.

  4. Tambah kawalan Label pada templat galeri.

  5. Lihat label sifat Teks untuk ThisItem.FullMatch.

    Galeri dipenuhi dengan setiap perkataan dalam teks contoh kami. Saiz semula templat galeri dan kawalan label untuk melihat semua perkataan pada satu skrin.

    Sifat teks.