Ambil perhatian
Akses ke halaman ini memerlukan kebenaran. Anda boleh cuba log masuk atau menukar direktori.
Akses ke halaman ini memerlukan kebenaran. Anda boleh cuba menukar direktori.
FungsiIsMatch , Match dan MatchAll digunakan untuk mengekstrak dan mengesahkan corak dalam teks. Corak yang mereka gunakan dipanggil ungkapan biasa.
Ungkapan biasa berkuasa dan serba boleh. Walau bagaimanapun, ia kadangkala boleh muncul sebagai urutan tanda baca rawak. Artikel ini tidak menerangkan semua aspek ungkapan biasa, tetapi banyak maklumat, tutorial dan alatan tersedia dalam talian.
Ungkapan biasa mempunyai sejarah yang panjang dan tersedia dalam banyak bahasa pengaturcaraan. Setiap bahasa pengaturcaraan mempunyai dialek ungkapan biasa tersendiri, dan terdapat beberapa piawaian. Seboleh-bolehnya, kami berusaha untuk mempunyai ungkapan biasa yang sama memberikan hasil yang sama merentas semua Power Fx pelaksanaan. Keserasian tidak mudah dicapai kerana Power Fx berjalan di atas JavaScript dan .NET yang mempunyai perbezaan yang ketara. Untuk dijalankan pada platform yang berbeza, Power Fx ungkapan biasa menggunakan subset ciri yang disokong secara meluas di seluruh industri.
Akibatnya, sesetengah ungkapan biasa yang berfungsi dalam persekitaran lain mungkin disekat atau memerlukan pelarasan Power Fx. Ralat masa pengarangan dilaporkan apabila ciri yang tidak disokong ditemui. Inilah sebabnya mengapa ungkapan dan opsyen biasa mestilah pemalar masa pengarangan dan tidak dinamik, seperti disediakan dalam pembolehubah.
Nota
Power Apps menggunakan versi Power Fx ungkapan biasa yang lebih awal, yang mempunyai lebih sedikit had tetapi juga lebih sedikit ciri. MatchOptions.DotAll dan MatchOptions.FreeSpacing tidak tersedia dan takrifan Match.Email dan Match.Hyphen adalah berbeza. Pasangan pengganti Unicode tidak dianggap sebagai satu aksara. MatchOptions.NumberedSubMatches ialah lalai. Versi ungkapan biasa yang diterangkan di sini boleh didapati tidak Power Apps lama lagi, di bawah suis "Power Fx keserasian V1.0".
Ciri yang disokong
Power Fx menyokong ciri ungkapan biasa berikut, dengan nota tentang cara Power Fx tingkah laku mungkin berbeza daripada sistem lain.
Ungkapan biasa mestilah malar dan tidak dikira atau disimpan dalam pembolehubah. Pengendali & , interpolasi $"{...}" rentetan, dan, ConcatenateChar, dan UniChar fungsi dengan hujah malar disokong.
Watak literal
| Ciri | Description |
|---|---|
| Watak literal | Mana-mana aksara Unicode boleh dimasukkan secara langsung, kecuali,,,, \[]^$.|?*+(){} Apabila menggunakan MatchOptions.FreeSpacing, #,, dan aksara ruang lain \s mesti dilepaskan kerana ia mempunyai makna yang berbeza. |
| Watak literal yang melarikan diri |
\ (garis miring belakang) diikuti dengan salah satu aksara literal langsung, seperti \? memasukkan tanda soal.
\# dan \ juga boleh digunakan walaupun MatchOptions.FreeSpacing dinyahdayakan untuk konsistensi. |
| Kod aksara heksadesimal dan Unicode |
\x20 dengan tepat dua digit heksadesimal, \u2028 dengan tepat empat digit heksadesimal dan boleh digunakan untuk pengganti tinggi dan rendah. |
| Titik kod Unicode |
\u{01F47B} dengan sehingga lapan digit heksadesimal. Mesti berada dalam julat 0 hingga U+10FFFF dan tidak boleh digunakan sama ada untuk pengganti tinggi atau rendah. Boleh mengakibatkan pasangan pengganti (dua aksara) jika lebih besar daripada U+FFFF. |
| Pemulangan kereta |
\r, sama dengan Char(13). |
| Watak Newline |
\n, sama dengan Char(10). |
| Borang suapan |
\f, sama dengan Char(12). |
| Tab mendatar |
\t, sama dengan Char(9). |
Gunakan \x atau \u sebaliknya. Kod oktal untuk aksara, seperti atau \044\o{044} tidak dibenarkan, kerana ia boleh menjadi samar-samar dengan rujukan belakang bernombor.
\v tidak disokong kerana ia samar-samar merentas bahasa ungkapan biasa. Gunakan \x0b untuk tab menegak atau [\x0b\f\r\n\x85\u2028\u2029] untuk ruang putih menegak.
Penegasan
Penegasan sepadan dengan kedudukan tertentu dalam teks tetapi tidak menggunakan sebarang aksara.
| Ciri | Description |
|---|---|
| Permulaan barisan |
^, sepadan dengan permulaan teks, atau baris jika MatchOptions.Multiline digunakan. |
| Penghujung barisan |
$, sepadan dengan penghujung teks, atau baris jika MatchOptions.Multiline digunakan. |
| Tinjauan ke hadapan |
(?=a) dan (?!a), padanan di hadapan untuk corak. |
| Lihat di belakang |
(?<=b) dan (?<!b), padanan di belakang untuk corak. |
| Rehat perkataan |
\b dan \B, menggunakan definisi huruf [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] Unicode. |
$ sepadan dengan hujung garisan, termasuk mana-mana mengekor \r\n\r,, atau \n.
Penegasan pandang ke hadapan dan pandang ke belakang tidak boleh mengandungi subpadanan atau pengukur tanpa had di dalamnya, dan tidak boleh digunakan dengan pengukur di luar.
Kelas watak
| Ciri | Description |
|---|---|
| Dot |
., sepadan dengan segala-galanya kecuali \r dan melainkan \nMatchOptions.DotAll digunakan. |
| Kelas watak |
[abc] senarai watak, [a-fA-f0-9] pelbagai watak, [^a-z] segala-galanya kecuali watak-watak ini. Kelas aksara tidak boleh bersarang, ditolak atau dipotong, dan banyak tanda baca mungkin tidak muncul dua kali berturut-turut (@@, %%, !!, dsb). |
| Aksara perkataan |
\w dan \W menggunakan definisi huruf [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] Unicode.
\W tidak boleh digunakan dalam kelas watak negatif. |
| Aksara digit |
\d termasuk digit 0 kepada dan,sepadan9\p{Nd} dengan segala-galanya kecuali aksara yang dipadankan dengan \D\d.
\D tidak boleh digunakan dalam kelas watak negatif. |
| Watak angkasa lepas |
\s termasuk aksara [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}] jarak, \S yang sepadan dengan segala-galanya kecuali aksara yang dipadankan dengan \s.
\S tidak boleh digunakan dalam kelas watak negatif. |
| Kategori aksara Unicode |
\p{Ll} sepadan dengan semua huruf kecil Unicode, manakala \P{Ll} sepadan dengan semua yang bukan huruf kecil Unicode.
\P{} tidak boleh digunakan dalam kelas watak negatif. |
Untuk meningkatkan kejelasan dan mengelakkan kekaburan, kelas aksara kurungan segi empat sama adalah lebih ketat daripada dalam bahasa ungkapan biasa yang lain:
- Aksara sempang literal mesti dilepaskan. Gunakan
[\-a]dan bukannya[-a]untuk memadankan-ataua. - Kurungan segi empat sama permulaan mesti melarikan diri. Gunakan
[\[a]dan bukannya[[]untuk memadankan[ataua. - Melainkan ia adalah aksara pertama dan menunjukkan penafian, watak itu mesti melarikan diri. Gunakan
[a\^]dan bukannya[a^]untuk memadankan^ataua. - Pendakap kerinting mesti dilepaskan. Gunakan
[\{\}]untuk memadankan{atau}. - Kelas
[]aksara kosong tidak disokong. Untuk memasukkan kurungan segi empat sama penutup dalam kelas aksara, lari daripadanya.
Kategori aksara Unicode yang disokong oleh \p{} dan \P{}:
- Surat:
L,Lu,,Ll,Lt,,LmLo - Markah:
M,,Mn,Mc,Me - Nombor:
N,,Nd,Nl,No - Tanda baca:
P,Pc,Pd,,Ps,Pe,,Pi,PfPo - Simbol:
S,Sm,,Sc,,SkSo - Pemisah:
Z,Zs,,ZlZp - Kawalan dan Format:
Cc,Cf, manakala kategori awalan lainCtidak disokong.
\W, \D,, dan \Stidak boleh digunakan dalam kelas \P{} aksara yang [^...] dinafikan. Untuk dilaksanakan pada sesetengah platform, kelas aksara negatif ini diterjemahkan kepada setara Unicode mereka yang mungkin sukar dilakukan jika juga dinafikan.
Aksara Unicode antara U+10000 dan U+10FFFF, yang memerlukan pasangan pengganti, tidak disokong dalam kelas aksara.
Pengukur
| Ciri | Description |
|---|---|
| Sifar tamak atau satu |
? padanan sifar atau satu kali, dengan perlawanan sebesar mungkin . |
| Sifar tamak atau lebih |
* padanan sifar atau lebih kali, dengan perlawanan sebesar mungkin . |
| Tamak satu atau lebih |
+ padanan satu atau lebih kali, dengan perlawanan sebesar mungkin . |
| Tamak sekurang-kurangnya n |
{n,} padanan sekurang-kurangnya n kali, dengan perlawanan sebesar mungkin . Sebagai contoh, a{3,} sepadan dengan semua aksara dalam aaaaa. |
| Tamak antara n dan m |
{n,m} padanan antara n dan m kali, dengan perlawanan sebesar mungkin . Sebagai contoh, a{1,3} sepadan dengan tiga aksara aaaaa pertama. |
| Sifar malas atau satu |
?? padanan sifar atau satu kali, dengan perlawanan sekecil mungkin . |
| Sifar malas atau lebih |
*? padanan sifar atau lebih kali, dengan perlawanan sekecil mungkin . |
| Malas satu atau lebih |
+? padanan satu atau lebih kali, dengan perlawanan sekecil mungkin . |
| Malas sekurang-kurangnya n |
{n,}? padanan sekurang-kurangnya n kali, dengan perlawanan sekecil mungkin . Sebagai contoh, a{3,}? hanya sepadan dengan tiga aksara pertama dalam aaaaa. |
| Malas antara n dan m |
{n,m}? padanan antara n dan m kali, dengan perlawanan sekecil mungkin. Sebagai contoh, a{1,3}? sepadan hanya dengan watak aaaaa pertama. |
| Tepat n |
{n} sepadan n kali, tepat. Sebagai contoh, a{3} sepadan dengan tepat tiga aksara. aaaaa |
Pengukur posesif tidak disokong.
Mencampurkan sub-padanan dan pengukur mempunyai had. Untuk maklumat lanjut, lihat Mungkin subpadanan kosong.
Kumpulan
| Ciri | Description |
|---|---|
| Kumpulkan |
( dan ) digunakan untuk mengumpulkan elemen untuk pengukur yang akan digunakan. Sebagai contoh, (abc)+ perlawanan abcabc. |
| Penggantian |
a|b sepadan dengan "a" atau "b", sering digunakan dalam kumpulan. |
| Nama subpadanan dan rujukan belakang |
(?<name>chars) menangkap subpadanan dengan nama name, dirujuk dengan \k<name>. Tidak boleh digunakan jika MatchOptions.NumberedSubMatches didayakan. |
| Subpadanan bernombor dan rujukan belakang | Apabila MatchOptions.NumberedSubMatches didayakan, menangkap subpadanan yang dirujuk dengan (a) . \1 |
| Kumpulan bukan tangkapan |
(?:a), mencipta kumpulan tanpa menangkap hasil sebagai subpadanan bernama atau bernombor. Semua kumpulan tidak menangkap melainkan MatchOptions.NumberedSubMatches didayakan. |
Subpadanan bernama dan bernombor tidak boleh digunakan bersama. Secara lalai, subpadanan bernama didayakan dan diutamakan untuk kejelasan dan kebolehselenggaraan, manakala kumpulan tangkapan standard menjadi kumpulan bukan tangkapan dengan prestasi yang lebih baik. Tingkah laku ini boleh diubah dengan MatchOptions.NumberedSubMatches yang menyediakan kumpulan tangkapan tradisional tetapi menyahdayakan kumpulan tangkapan bernama. Sesetengah pelaksanaan melayan gabungan kumpulan tangkapan bernombor dan dinamakan secara berbeza, itulah sebabnya Power Fx tidak membenarkannya.
Kumpulan tangkapan rujukan diri tidak disokong, contohnya ungkapan (a\1) biasa.
Dua kumpulan tangkapan tidak boleh berkongsi nama yang sama, contohnya, ungkapan (?<id>\w+)|(?<id>\d+) biasa tidak disokong.
Nama subpadanan yang dinamakan mesti bermula dengan \p{L} watak atau _, dan boleh diteruskan dengan aksara tersebut ditambah \p{Nd}. Nama dihadkan panjangnya kepada 62 unit kod UTF-16.
Rujukan belakang kepada kemungkinan subpadanan kosong dan kepada subpadanan dalam pandang ke belakang atau ke hadapan juga tidak disokong.
Sesetengah pelaksanaan menawarkan pilihan "tangkapan eksplisit" untuk meningkatkan prestasi yang tidak perlu Power Fx kerana ia adalah lalai. MatchOptions.NumberedSubMatches melumpuhkannya dan mendayakan tangkapan bernombor tersirat.
Mencampurkan subpadanan dan pengukur mempunyai batasan. Lihat Kemungkinan subpadanan kosong untuk maklumat lanjut.
Komen
| Ciri | Description |
|---|---|
| Komen sebaris |
(?# comment here), yang diabaikan sebagai komen. Komen berakhir dengan kurungan rapat seterusnya, walaupun kurungan pembukaan terdapat dalam komen. |
Lihat MatchOptions.FreeSpacing untuk alternatif untuk memformatkan dan mengulas ungkapan biasa.
Pilihan sebaris
| Ciri | Description |
|---|---|
| Pilihan sebaris |
(?im) adalah sama seperti menggunakan MatchOptions.IgnoreCase dan MatchOptions.Multiline. Mesti ditetapkan pada permulaan ungkapan biasa. |
Mod sebaris yang disokong ialah [imsx]. Ini sepadan dengan MatchOptions.IgnoreCase,MatchOptions.Multiline,MatchOptions.DotAll dan MatchOptions.FreeSpacing, masing-masing.
n juga diterima untuk keserasian tetapi tidak mempunyai kesan kerana ia adalah lalai dan tidak serasi dengan MatchOptions.NumberedSubMatches.
Opsyen sebaris tidak boleh digunakan untuk menyahdayakan opsyen atau mengesetkan opsyen untuk subungkapan.
Opsyen
Opsyen padanan mengubah tingkah laku padanan ungkapan biasa. Terdapat dua cara untuk mendayakan pilihan, yang boleh dicampur selagi tiada konflik:
-
Nilai enum MatchOptions diluluskan sebagai hujah ketiga kepada Match,MatchAll dan IsMatch. Pilihan boleh digabungkan dengan
&pengendali atauConcatenatefungsi, sebagai contohMatchOptions.DotAll & MatchOptions.FreeSpacing. Semua fungsi ungkapan biasa memerlukan MatchOptions ialah nilai malar, ia tidak boleh dikira atau disimpan dalam pembolehubah. -
(?...)awalan pada permulaan ungkapan biasa. Pilihan boleh digabungkan dengan berbilang huruf dalam(?...)binaan, sebagai contoh(?sx). Sesetengah opsyen tidak mempunyai(?...)persamaan tetapi mungkin mempunyai cara lain untuk mendapatkan kesan yang sama, contohnya MatchOptions.BeginsWith adalah bersamaan dengan^pada permulaan ungkapan biasa.
Mengandungi
Didayakan dengan MatchOptions.Contains tanpa teks ungkapan biasa yang setara. MatchOptions.Contains ialah lalai untuk semua fungsi di luar; dalam Power AppsMatchOptions.Complete Power Apps ialah lalai untuk IsMatch.
Dilengkapkan
Didayakan dengan MatchOptions.Complete atau gunakan ^ dan $ pada permulaan dan ungkapan biasa, masing-masing.
BeginsWith
Didayakan dengan MatchOptions.BeginsWith atau gunakan ^ pada permulaan dan ungkapan biasa.
EndsWith
Didayakan dengan MatchOptions.EndsWith atau gunakan $ pada penghujung ungkapan biasa.
DotAll
Didayakan dengan MatchOptions.DotAll atau (?s) pada permulaan ungkapan biasa.
Biasanya pengendali titik . sepadan dengan semua aksara kecuali aksara [\n\x0b\f\r\x85\u2028\u2029] baris baru. Dengan pengubah suai DotAll , semua watak dipadankan, termasuk baris baharu.
Dalam contoh ini, hanya "Hello" dipadankan kerana secara lalai . tidak akan sepadan dengan baris baharu:
Trim( Match( "Hello
World", ".*" ).FullMatch )
// returns
// "Hello"
Tetapi jika kita menambah pengubah suai DotAll , maka baris baru dan semua aksara berikutnya dipadankan:
Trim( Match( "Hello
World", ".*", MatchOptions.DotAll ).FullMatch )
// returns
// "Hello
// World"
Jarak Bebas
Didayakan dengan MatchOptions.FreeSpacing atau (?x) pada permulaan ungkapan biasa.
Jarak bebas menjadikannya lebih mudah untuk membaca dan mengekalkan ungkapan biasa yang kompleks. Peraturannya mudah:
- Aksara angkasa diabaikan dalam ungkapan biasa, termasuk semua aksara yang sepadan
\s. Jika memadankan ruang dikehendaki, gunakan\s,\,,\t,\ratau\n. -
#memulakan komen yang berlangsung sehingga akhir baris. Ia dan semua aksara yang mengikuti watak baris baru seterusnya (aksara yang tidak dipadankan tanpa.MatchOptions.DotAll) diabaikan. - Kelas watak tidak termasuk dalam perubahan ini. Ruang watak dan
#bertindak seperti biasa. Sebagai contoh,IsMatch( "a#b c", "(?x)a[ #]b[ #]c" )mengembalikan benar. Sesetengah bahasa ungkapan biasa termasuk kelas aksara dalam jarak bebas atau menyediakan pilihan untuk memasukkannya, tetapi Power Fx tidak.
Sebagai contoh, berikut ialah ungkapan biasa yang kompleks untuk memadankan tarikh masa ISO8601:
IsMatch(
"2025-01-17T19:38:49+0000",
"^\d{4}-(0\d|1[012])-([012]\d|3[01])(T([01]\d|2[0123]):[0-5]\d(:[0-5]\d(\.\d{3})?)?(Z|[\-+]\d{4}))?$"
)
// returns true
Dan berikut ialah ungkapan biasa yang sama dengan jarak bebas menggunakan berbilang baris, lekukan untuk kumpulan dan komen ungkapan biasa, menjadikan versi ini lebih mudah difahami, disahkan dan diselenggara.
IsMatch( "2025-01-17T19:38:49+0000",
"(?x) # enables free spacing, must be very first
^ # matches from beginning of text
\d{4} # year (0000-9999)
-(0\d|1[012]) # month (00-12)
-([012]\d|3[01]) # day (00-31, range not checked against month)
(T([01]\d|2[0123]) # optional time, starting with hours (00-23)
:[0-5]\d # minutes (00-59)
(:[0-5]\d # optional seconds (00-59)
(\.\d{3})? # optional milliseconds (000-999)
)?
(Z|[\-+]\d{4}) # time zone
)?
$ # matches to end of text
"
)
// returns true
Abaikan Kes
Didayakan dengan MatchOptions.IgnoreCase atau (?i) pada permulaan ungkapan biasa.
Memadankan teks dalam huruf besar tidak sensitif: huruf besar sepadan dengan huruf kecil dan huruf kecil sepadan dengan huruf besar.
Contohnya:
IsMatch( "HELLO!", "hello", MatchOptions.IgnoreCase )
// returns true
IsMatch( "file://c:/temp/info.txt", "^FILE://", MatchOptions.IgnoreCase )
// returns true
Kebanyakan bahagian atau Power Fx mementingkan budaya, tetapi tidak di sini. Menggunakan padanan invarian budaya ialah standard industri untuk ungkapan biasa, termasuk dalam JavaScript dan Perl. Ia berguna dalam contoh kedua di mana sumber sistem dipadankan, sebagai contoh, tr-TR budaya di mana I tidak setara i dengan huruf besar.
Jika padanan tidak sensitif huruf besar yang sedar budaya diperlukan, gunakan kelas aksara dengan aksara yang sepadan, contohnya [Hh][Ee][Ll][Ll][Oo] untuk contoh pertama.
Baris berbilang
Didayakan dengan MatchOptions.Multiline atau (?m) pada permulaan ungkapan biasa.
Biasanya, ^ dan $ sauh sepadan dengan permulaan dan teks input. Dengan pengubah suai Berbilang baris , sauh ini sepadan dengan permulaan dan penghujung baris dalam teks input, di mana setiap baris berakhir dengan \r, \n, \r\n, atau penghujung input. Contohnya:
MatchAll( "Hello" & Char(13) & Char(10) & "World", "^.+$" )
// returns
// "Hello"
Corak dipratakrif
Corak yang telah ditetapkan membolehkan anda memadankan sama ada satu daripada set aksara atau jujukan berbilang aksara. Gunakan operator rentetan-concatenation& untuk menggabungkan rentetan teks anda dengan ahli enum Match :
| Padankan enum | Description | Pernyataan biasa |
|---|---|---|
| Sebarang | Padankan sebarang aksara. | . |
| Koma | Sepadan dengan koma ,. |
, |
| Angka | Sepadan dengan satu digit (0 melalui 9 dan ahli \p{Nd} lain). |
\d |
| E-mel | Memadankan alamat e-mel yang mengandungi simbol "at" (@) dan nama domain yang mengandungi sekurang-kurangnya satu titik (.), dihadkan oleh ruang putih dan aksara tanda baca. |
Lihat nota |
| Tanda sempang | Padankan tanda sempang. |
-
Lihat nota |
| LeftParen | Sepadan dengan kurungan ( kiri. |
\( |
| Surat | Padankan huruf. | \p{L} |
| Berbilang Digit | Padankan satu atau lebih digit. | \d+ |
| Pelbagai Huruf | Padankan satu atau lebih huruf. | \p{L}+ |
| Berbilang Ruang Bukan | Padankan satu atau lebih aksara yang tidak menambah ruang kosong (bukan ruang, tab atau baris baharu). | \S+ |
| Berbilang Ruang | Padankan satu atau lebih aksara yang menambah ruang kosong (ruang, tab atau baris baharu). | \s+ |
| Bukan Angkasa | Padankan aksara tunggal yang tidak menambah ruang kosong. | \S |
| Digit Pilihan | Padankan sifar, satu atau lebih digit. | \d* |
| PilihanSurat | Padankan sifar, satu atau lebih huruf. | \p{L}* |
| PilihanNonSpaces | Padankan sifar, satu atau lebih aksara yang tidak menambah ruang kosong. | \S* |
| PilihanRuang | Padankan sifar, satu atau lebih aksara yang menambah ruang kosong. | \s* |
| Tempoh | Sepadan dengan titik atau titik .."). |
\. |
| RightParen | Sepadan dengan kurungan ) kanan. |
\) |
| Ruang | Padankan aksara yang menambah ruang kosong. | \s |
| Tab | Sepadan dengan aksara tab. | \t |
Sebagai contoh, corak "A" & Match.MultipleDigits sepadan dengan huruf "A" diikuti dengan satu atau lebih digit.
Corak Match.Email lebih kompleks daripada yang lain. Ia mengesan dan mengekstrak alamat e-mel biasa dalam borang local@hostname.tld, mungkin daripada petikan teks yang panjang, dan menyokong aksara dan emoji antarabangsa. Gunakannya untuk mengesahkan borang yang mengambil alamat e-mel sebagai input, sebagai ujian pantas bahawa input itu dalam borang e-mel. Jika anda tidak mengekstrak, gunakan MatchOptions.Complete untuk mengesan alamat e-mel, contohnya, dalam kawalan input teks.
Walau bagaimanapun, Match.Email tidak mengesahkan bahawa alamat e-mel mematuhi semua piawaian yang berkembang untuk alamat e-mel, nama domain dan domain peringkat teratas yang memerlukan ungkapan biasa yang rumit yang perlu dikemas kini dari semasa ke semasa. Walaupun kebanyakan alamat e-mel dianggap seperti yang dijangkakan, Match.Email sepadan dengan beberapa kes tidak sah, seperti garis bawah dalam nama hos dan tidak sepadan dengan beberapa kes yang sah, seperti alamat e-mel yang dipetik atau alamat IP. Jika perlu, terdapat banyak ungkapan biasa di web untuk mengesan alamat e-mel yang benar-benar sah. Sentiasa uji ungkapan biasa anda untuk keperluan khusus anda sebelum digunakan dalam pengeluaran.
Jika anda mahu melihat ungkapan biasa yang digunakan, nilai formula Text( Match.Email ). Bahagian pertama sepadan dengan aksara sebelum @ dan tidak termasuk tanda baca ASCII biasa mengikut RFC 822 dan semakan serta tanda baca permulaan dan pengakhiran Unicode untuk pengekstrakan yang lebih mudah, seperti (, [, “, « dan 「. Ia tidak menyokong penggunaan rentetan atau komen yang dipetik yang luar biasa dan tidak digalakkan. Berikutan @, bahagian kedua dan ketiga ungkapan biasa adalah sama dan dipisahkan dengan a ., memastikan bahawa sentiasa ada sekurang-kurangnya satu . dalam alamat. Bahagian ini tidak termasuk semua tanda baca Unicode kecuali untuk ., -, dan _. Alamat IP tidak disokong. Sepanjang keseluruhan alamat e-mel, aksara dan emoji antarabangsa disokong.
Dalam Power Apps, apabila tidak menggunakan Power Fx 1.0,Match.Email dan Match.Hyphen mempunyai definisi yang sedikit berbeza. Match.Email lebih mudah, tetapi tidak sesuai untuk mengekstrak alamat e-mel kerana ia menangkap ruang. Sebelum ini, Match.Hyphen telah melarikan diri di luar kelas watak yang kini menyalahi undang-undang.
Subpadanan Bernombor
Didayakan dengan MatchOptions.NumberedSubMatches tanpa pilihan sebaris.
(?n) disokong sebagai bertentangan dengan pilihan ini untuk keserasian dan merupakan lalai.
Secara lalai, (...) tidak menangkap, bersamaan dengan apa yang kebanyakan sistem panggil "tangkapan eksplisit." Untuk menangkap, gunakan tangkapan bernama dengan (?<name>...) rujukan \k<name> belakang. Menggunakan tangkapan bernama meningkatkan prestasi dengan tidak menangkap kumpulan yang tidak diperlukan, meningkatkan kejelasan dengan menggunakan nama dan tidak terdedah kepada ralat jika kedudukan tangkapan berubah.
Jika anda mempunyai ungkapan biasa sedia ada, ia mungkin bergantung pada kumpulan yang ditangkap secara automatik dan bernombor, termasuk rujukan belakang bernombor. Tingkah laku ini tersedia dengan menggunakan opsyen MatchOptions.NumberedSubMatchs .
Subpadanan bernama dan bernombor tidak boleh digunakan bersama. Oleh kerana sesetengah pelaksanaan merawat gabungan kumpulan tangkapan bernombor dan dinamakan secara berbeza, tidak membenarkannya. Power Fx
Mungkin subpadanan kosong
Seperti yang dinyatakan dalam pengenalan, Power Fx ungkapan biasa sengaja dihadkan kepada ciri yang boleh dilaksanakan secara konsisten pada .NET, JavaScript dan enjin ungkapan biasa bahasa pengaturcaraan lain. Ralat masa pengarangan menghalang penggunaan ciri yang bukan sebahagian daripada set ini.
Satu kawasan yang boleh berbeza antara pelaksanaan ialah cara subpadanan kosong dikendalikan. Sebagai contoh, pertimbangkan ungkapan (?<submatch>a*)+ biasa yang diminta untuk dipadankan dengan teks a. Pada .NET, subpadanan menghasilkan rentetan teks kosong, manakala pada JavaScript ia menghasilkan a. Kedua-duanya boleh dihujahkan sebagai pelaksanaan yang betul, kerana + pengukur boleh berpuas hati dengan rentetan kosong kerana kandungan kumpulan mempunyai * pengukur.
Untuk mengelakkan hasil yang berbeza merentas Power Fx pelaksanaan, subpadanan yang mungkin kosong tidak boleh digunakan dengan pengukur. Berikut ialah contoh cara subpadanan boleh kosong:
| Contoh | Description |
|---|---|
(?<submatch>a{0,}b*)+ |
Semua kandungan padanan kecil adalah pilihan, jadi keseluruhan padanan kecil mungkin kosong. |
((<submatch>a)?b)+ |
Oleh kerana bahagian ? luar subpadanan, subpadanan secara keseluruhan adalah pilihan. |
(?<submatch>a|b*)+ |
Penggantian dalam subpadanan dengan sesuatu yang boleh kosong boleh mengakibatkan keseluruhan subpadanan kosong. |
((?<submatch>a)|b)+ |
Penggantian di luar subpadanan boleh dipadankan b dalam hal ini subpadanan akan kosong. |
Subpadanan masuk (?<submatch>a+)+ tidak boleh kosong kerana mesti ada sekurang-kurangnya satu a dalam subpadanan dan ia disokong.
Unicode
Power Fx ungkapan biasa menggunakan kategori Unicode untuk mentakrifkan \w,, dan \d, dengan kategori tertentu tersedia melalui \s\p{..}.
Takrifan ini mungkin berbeza merentas platform. Sebagai contoh, piawaian Unicode dikemas kini dari semasa ke semasa dengan aksara baharu yang kemudiannya akan dilaksanakan oleh platform mengikut kadar mereka sendiri. Jangkakan variasi dalam keputusan antara platform sehingga semua platform dikemas kini.
Power Fx ungkapan biasa memastikan maklumat kategori sentiasa tersedia untuk Satah Berbilang Bahasa Asas (aksara U+0 hingga U+ffff). Sesetengah platform tidak melaksanakan kategori untuk aksara dalam Satah Berbilang Bahasa Tambahan dan seterusnya (U+10000 hingga U+10ffff). Had ini biasanya tidak menjadi kebimbangan kerana aksara dalam Satah Berbilang Bahasa Asas adalah yang paling biasa digunakan. Gunakan nilai aksara secara langsung dan bukannya kategori jika senario anda melibatkan watak pada atau melebihi U+10000. Uji ungkapan biasa anda pada platform yang anda ingin gunakan.
Perbezaan kes tepi kecil mungkin wujud antara platform. Sebagai contoh, sesetengah platform mungkin tidak kelihatan ſ sepadan s apabila MatchOptions.IgnoreCase dipanggil. Jika watak ini penting untuk senario anda, gunakan kelas aksara seperti [ſsS] untuk memadankan huruf besar secara tidak sensitif dan secara eksplisit menyertakan aksara yang dikehendaki.