Bagikan melalui


Ekspresi reguler

FungsiIsMatch , Match , dan MatchAll digunakan untuk mengekstrak dan memvalidasi pola dalam teks. Pola yang mereka gunakan disebut ekspresi reguler.

Ekspresi reguler kuat dan serbaguna. Namun, mereka terkadang dapat muncul sebagai urutan tanda baca acak. Artikel ini tidak menjelaskan semua aspek ekspresi reguler, tetapi banyak informasi, tutorial, dan alat tersedia secara online.

Ekspresi reguler memiliki sejarah panjang dan tersedia dalam banyak bahasa pemrograman. Setiap bahasa pemrograman memiliki dialek ekspresi regulernya sendiri, dan hanya ada beberapa standar. Sebisa mungkin, kami berusaha untuk memiliki ekspresi reguler yang sama memberikan hasil yang sama di semua Power Fx implementasi. Kompatibilitas tidak mudah dicapai karena Power Fx berjalan di atas JavaScript dan .NET yang memiliki perbedaan signifikan. Untuk berjalan di platform yang berbeda, Power Fx ekspresi reguler menggunakan subset fitur yang didukung secara luas di seluruh industri.

Akibatnya, beberapa ekspresi reguler yang berfungsi di lingkungan lain mungkin diblokir atau memerlukan penyesuaian Power Fx. Kesalahan waktu penulisan dilaporkan saat fitur yang tidak didukung ditemui. Inilah sebabnya mengapa ekspresi reguler dan opsi harus berupa konstanta waktu penulisan dan tidak dinamis, seperti disediakan dalam variabel.

Catatan

Power Apps menggunakan versi Power Fx ekspresi reguler sebelumnya, yang memiliki lebih sedikit batasan tetapi juga lebih sedikit fitur. MatchOptions.DotAll dan MatchOptions.FreeSpacing tidak tersedia dan definisi Match.Email dan Match.Hyphen berbeda. Pasangan pengganti Unicode tidak diperlakukan sebagai satu karakter. MatchOptions.NumberedSubMatches adalah default. Versi ekspresi reguler yang dijelaskan di sini akan segera tersedia Power Apps , di bawah sakelar "Power Fx kompatibilitas V1.0".

Fitur yang Didukung

Power Fx mendukung fitur ekspresi reguler berikut, dengan catatan tentang bagaimana Power Fx perilaku mungkin berbeda dari sistem lain.

Ekspresi reguler harus konstan dan tidak dihitung atau disimpan dalam variabel. Operator & , interpolasi $"{...}" string, dan fungsi, ConcatenateChar, dan UniChar dengan argumen konstan didukung.

Karakter literal

Fitur Description
Karakter literal Karakter Unicode apa pun dapat disisipkan secara langsung, kecuali,,,, \[]^$.|?*+(){} Saat menggunakan MatchOptions.FreeSpacing, #, , dan karakter spasi lainnya \s harus diloloskan karena memiliki arti yang berbeda.
Karakter literal yang lolos \ (garis miring terbalik) diikuti dengan salah satu karakter literal langsung, seperti \? menyisipkan tanda tanya. \# dan \ juga dapat digunakan bahkan ketika MatchOptions.FreeSpacing dinonaktifkan untuk konsistensi.
Kode karakter heksadesimal dan Unicode \x20 dengan tepat dua digit heksadesimal, \u2028 dengan tepat empat digit heksadesimal dan dapat digunakan untuk pengganti tinggi dan rendah.
Titik kode Unicode \u{01F47B} dengan hingga delapan digit heksadesimal. Harus berada dalam kisaran 0 hingga U+10FFFF dan tidak dapat digunakan untuk pengganti tinggi atau rendah. Dapat menghasilkan pasangan pengganti (dua karakter) jika lebih besar dari U+FFFF.
Pengembalian kereta \r, sama dengan Char(13).
Karakter Newline \n, sama dengan Char(10).
Formulir umpan \f, sama dengan Char(12).
Tab Horisontal \t, sama dengan Char(9).

Gunakan \x atau \u sebagai gantinya. Kode oktal untuk karakter, seperti atau \044\o{044} tidak diizinkan, karena dapat ambigu dengan referensi belakang bernomor.

\v tidak didukung karena ambigu di seluruh bahasa ekspresi reguler. Gunakan \x0b untuk tab vertikal atau [\x0b\f\r\n\x85\u2028\u2029] untuk spasi vertikal.

Pernyataan

Pernyataan cocok dengan posisi tertentu dalam teks tetapi tidak menggunakan karakter apa pun.

Fitur Description
Mulai baris ^, cocok dengan awal teks, atau baris jika MatchOptions.Multiline digunakan.
Akhir baris $, cocok dengan akhir teks, atau baris jika MatchOptions.Multiline digunakan.
Melihat ke depan (?=a) dan (?!a), pertandingan di depan untuk sebuah pola.
Melihat di belakang (?<=b) dan (?<!b), cocok di belakang untuk sebuah pola.
Kata jeda \b dan \B, menggunakan definisi huruf [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] Unicode.

$ cocok dengan akhir garis, termasuk trailing \r\n, \r, or \n.

Pernyataan lookahead dan lookbehind tidak dapat berisi submatch atau pengukur tak terbatas di dalamnya, dan tidak dapat digunakan dengan pengukur di luar.

Kelas karakter

Fitur Description
Dot ., cocok dengan semuanya kecuali \r dan \n kecuali MatchOptions.DotAll digunakan.
Kelas karakter [abc] daftar karakter, [a-fA-f0-9] rentang karakter, [^a-z] semuanya kecuali karakter ini. Kelas karakter tidak dapat bersarang, dikurangi, atau dipotong, dan banyak tanda baca mungkin tidak muncul dua kali berturut-turut (@@, %%, !!, dll).
Karakter kata \w dan \W menggunakan definisi huruf [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] Unicode. \W tidak dapat digunakan di kelas karakter negatif.
Karakter digit \d termasuk digit 0 ke dan,cocok9\p{Nd} dengan semua kecuali karakter yang cocok dengan \D\d. \D tidak dapat digunakan di kelas karakter negatif.
Karakter luar angkasa \s Termasuk karakter [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}] spasi, \S yang cocok dengan semua kecuali karakter yang cocok dengan \s. \S tidak dapat digunakan di kelas karakter negatif.
Kategori karakter Unicode \p{Ll} cocok dengan semua huruf kecil Unicode, sedangkan \P{Ll} cocok dengan semua yang bukan huruf kecil Unicode. \P{} tidak dapat digunakan di kelas karakter negatif.

Untuk meningkatkan kejelasan dan menghindari ambiguitas, kelas karakter tanda kurung siku lebih ketat daripada dalam bahasa ekspresi reguler lainnya:

  • Karakter tanda hubung literal harus diloloskan. Gunakan [\-a] alih-alih [-a] untuk mencocokkan - atau a.
  • Tanda kurung siku awal harus dikeluarkan. Gunakan [\[a] alih-alih [[] untuk mencocokkan [ atau a.
  • Kecuali jika itu adalah karakter pertama dan menunjukkan negasi, karakter tersebut harus diloloskan. Gunakan [a\^] alih-alih [a^] untuk mencocokkan ^ atau a.
  • Kawat gigi keriting harus dihindari. Gunakan [\{\}] untuk mencocokkan { atau }.
  • Kelas [] karakter kosong tidak didukung. Untuk menyertakan tanda kurung siku penutup dalam kelas karakter, hindari.

Kategori karakter Unicode didukung oleh \p{} dan \P{}:

  • Surat: L, Lu,, Ll, Lt,, LmLo
  • Tanda: M,, Mn, Mc, Me
  • Angka: N, Nd,, NlNo
  • Tanda baca: P, Pc, Pd,, Ps, Pe,, Pi, PfPo
  • Simbol: S, Sm,, Sc,, SkSo
  • Pemisah: Z, Zs,, ZlZp
  • Control and Format: Cc, Cf, sementara kategori awalan lainnya C tidak didukung.

\W, \D,, dan \Stidak dapat digunakan dalam kelas \P{} karakter yang dinegasikan [^...]. Untuk diimplementasikan di beberapa platform, kelas karakter negatif ini diterjemahkan ke setara Unicode mereka yang mungkin sulit dilakukan jika juga dinegasikan.

Karakter Unicode antara U+10000 dan U+10FFFF, yang memerlukan pasangan pengganti, tidak didukung di kelas karakter.

Pengukur

Fitur Description
Nol serakah atau satu ? cocok nol atau satu kali, dengan kecocokan sebesar mungkin.
Serakah nol atau lebih * cocok nol kali atau lebih, dengan kecocokan sebesar mungkin.
Serakah satu atau lebih + cocok satu atau lebih kali, dengan korek api sebesar mungkin.
Serakah setidaknya n {n,} cocok setidaknya n kali, dengan korek api sebesar mungkin. Misalnya, a{3,} cocok dengan semua karakter dalam aaaaa.
Keserakahan antara n dan m {n,m} Pertandingan antara n dan m kali, dengan kecocokan sebesar mungkin. Misalnya, a{1,3} cocok dengan tiga karakter pertama dari. aaaaa
Nol malas atau satu ?? cocok nol atau satu kali, dengan kecocokan sekecil mungkin.
Nol malas atau lebih *? Cocok nol kali atau lebih, dengan kecocokan sekecil mungkin.
Malas satu atau lebih +? cocok satu atau lebih kali, dengan korek api sekecil mungkin.
Malas setidaknya n {n,}? cocok setidaknya n kali, dengan korek api sekecil mungkin. Misalnya, a{3,}? hanya cocok dengan tiga karakter pertama di. aaaaa
Malas antara n dan m {n,m}? Pertandingan antara n dan m kali, dengan kecocokan sekecil mungkin. Misalnya, a{1,3}? hanya cocok dengan karakter pertama dari. aaaaa
Tepat n {n} cocok n kali, tepat. Misalnya, a{3} cocok persis dengan tiga karakter aaaaa.

Pengukur posesif tidak didukung.

Mencampur sub-pertandingan dan pengukur memiliki keterbatasan. Untuk informasi selengkapnya, lihat Kemungkinan sub-kecocokan kosong.

Grup

Fitur Description
Grupkan ( dan ) digunakan untuk mengelompokkan elemen untuk pengukur yang akan diterapkan. Misalnya, (abc)+ korek api abcabc.
Pergantian a|b cocok dengan "a" atau "b", sering digunakan dalam grup.
Submatch bernama dan referensi kembali (?<name>chars) menangkap submatch dengan nama name, yang direferensikan dengan \k<name>. Tidak dapat digunakan jika MatchOptions.NumberedSubMatches diaktifkan.
Submatch bernomor dan referensi belakang Saat MatchOptions.NumberedSubMatches diaktifkan, menangkap submatch yang direferensikan dengan (a) . \1
Grup non-tangkapan (?:a), membuat grup tanpa menangkap hasilnya sebagai submatch bernama atau bernomor. Semua grup tidak menangkap kecuali MatchOptions.NumberedSubMatches diaktifkan.

Submatch bernama dan bernomor tidak dapat digunakan bersama. Secara default, submatch bernama diaktifkan dan lebih disukai untuk kejelasan dan pemeliharaan, sedangkan grup pengambilan standar menjadi grup non-pengambilan dengan performa yang ditingkatkan. Perilaku ini dapat diubah dengan MatchOptions.NumberedSubMatchs , yang menyediakan grup pengambilan tradisional tetapi menonaktifkan grup pengambilan bernama. Beberapa implementasi memperlakukan campuran grup pengambilan bernomor dan bernama secara berbeda, itulah sebabnya Power Fx tidak mengizinkannya.

Grup pengambilan referensi mandiri tidak didukung, misalnya ekspresi (a\1) reguler.

Dua grup pengambilan tidak dapat berbagi nama yang sama, misalnya, ekspresi (?<id>\w+)|(?<id>\d+) reguler tidak didukung.

Nama submatch bernama harus dimulai dengan \p{L} karakter atau _, dan dapat dilanjutkan dengan karakter tersebut plus \p{Nd}. Nama dibatasi panjangnya hingga 62 unit kode UTF-16.

Referensi balik ke kemungkinan subpertandingan kosong dan ke subpertandingan dalam melihat ke belakang atau melihat ke depan juga tidak didukung.

Beberapa implementasi menawarkan opsi "tangkapan eksplisit" untuk meningkatkan performa yang tidak perlu Power Fx karena ini adalah default. MatchOptions.NumberedSubMatches menonaktifkannya dan memungkinkan pengambilan bernomor implisit.

Mencampur submatch dan kuantifikasi memiliki keterbatasan. Lihat Kemungkinan submatch kosong untuk informasi selengkapnya.

Komentar

Fitur Description
Komentar sebaris (?# comment here), yang diabaikan sebagai komentar. Komentar diakhiri dengan tanda kurung berikutnya, bahkan jika tanda kurung pembuka ada di komentar.

Lihat MatchOptions.FreeSpacing untuk alternatif untuk memformat dan mengomentari ekspresi reguler.

Opsi sebaris

Fitur Description
Opsi sebaris (?im) sama dengan menggunakan MatchOptions.IgnoreCase dan MatchOptions.Multiline. Harus diatur di awal ekspresi reguler.

Mode sebaris yang didukung adalah [imsx]. Ini sesuai dengan MatchOptions.IgnoreCase,MatchOptions.Multiline,MatchOptions.DotAll, dan MatchOptions.FreeSpacing , masing-masing. n juga diterima untuk kompatibilitas tetapi tidak berpengaruh karena merupakan default dan tidak kompatibel dengan MatchOptions.NumberedSubMatches.

Opsi sebaris tidak dapat digunakan untuk menonaktifkan opsi atau mengatur opsi untuk subekspresi.

Opsi

Opsi pencocokan mengubah perilaku pencocokan ekspresi reguler. Ada dua cara untuk mengaktifkan opsi, yang dapat dicampur selama tidak ada konflik:

  • Nilai enum MatchOptions diteruskan sebagai argumen ketiga ke Match,MatchAll, dan IsMatch. Opsi dapat dikombinasikan dengan & operator atau Concatenate fungsi, misalnya. MatchOptions.DotAll & MatchOptions.FreeSpacing Semua fungsi ekspresi reguler mengharuskan MatchOptions adalah nilai konstan, tidak dapat dihitung atau disimpan dalam variabel.
  • (?...) awalan di awal ekspresi reguler. Opsi dapat digabungkan dengan beberapa huruf dalam (?...) konstruksi, misalnya (?sx). Beberapa opsi tidak memiliki (?...) setara tetapi mungkin memiliki cara lain untuk mendapatkan efek yang sama, misalnya MatchOptions.BeginsWith setara dengan ^ di awal ekspresi reguler.

Berisi

Diaktifkan dengan MatchOptions.Contains tanpa setara teks ekspresi reguler. MatchOptions.Contains adalah default untuk semua fungsi di luar; dalam Power AppsMatchOptions.Complete Power Apps adalah default untuk IsMatch.

Selesaikan

Diaktifkan dengan MatchOptions.Complete atau gunakan ^ dan $ di awal dan ekspresi reguler, masing-masing.

BeginsWith

Diaktifkan dengan MatchOptions.BeginsWith atau gunakan ^ di awal dan ekspresi reguler.

EndsWith

Diaktifkan dengan MatchOptions.EndsWith atau gunakan $ di akhir ekspresi reguler.

DotAll

Diaktifkan dengan MatchOptions.DotAll atau (?s) di awal ekspresi reguler.

Biasanya operator titik . cocok dengan semua karakter kecuali karakter [\n\x0b\f\r\x85\u2028\u2029] baris baru. Dengan pengubah DotAll , semua karakter dicocokkan, termasuk baris baru.

Dalam contoh ini, hanya "Halo" yang cocok karena secara default . tidak akan cocok dengan baris baru:

Trim( Match( "Hello
              World", ".*" ).FullMatch )
// returns 
// "Hello"

Tetapi jika kita menambahkan pengubah DotAll , maka baris baru dan semua karakter berikutnya akan cocok:

Trim( Match( "Hello
              World", ".*", MatchOptions.DotAll ).FullMatch )
// returns 
// "Hello
// World"

Spasi Bebas

Diaktifkan dengan MatchOptions.FreeSpacing atau (?x) di awal ekspresi reguler.

Spasi bebas memudahkan untuk membaca dan mempertahankan ekspresi reguler yang kompleks. Aturannya sederhana:

  • Karakter spasi diabaikan dalam ekspresi reguler, termasuk semua karakter yang akan cocok \s. Jika diinginkan untuk mencocokkan spasi, gunakan \s, \ , \t,, \r atau \n.
  • # memulai komentar yang berlangsung hingga akhir baris. Itu dan semua karakter yang menindaklanjuti karakter baris baru berikutnya (karakter yang tidak cocok tanpa .MatchOptions.DotAll) diabaikan.
  • Class karakter tidak disertakan dalam perubahan ini. Ruang angkasa karakter dan # bertindak seperti biasa. Misalnya, IsMatch( "a#b c", "(?x)a[ #]b[ #]c" ) mengembalikan true. Beberapa bahasa ekspresi reguler menyertakan kelas karakter dalam spasi bebas, atau menyediakan opsi untuk menyertakannya, tetapi Power Fx tidak.

Misalnya, berikut adalah ekspresi reguler yang kompleks untuk mencocokkan tanggal waktu 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 adalah ekspresi reguler yang identik dengan spasi bebas menggunakan beberapa baris, lekukan untuk grup, dan komentar ekspresi reguler, membuat versi ini lebih mudah dipahami, divalidasi, dan dipelihara.

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

MengabaikanKasus

Diaktifkan dengan MatchOptions.IgnoreCase atau (?i) di awal ekspresi reguler.

Mencocokkan teks dalam huruf tidak peka huruf besar: huruf besar cocok dengan huruf kecil dan huruf kecil cocok dengan huruf besar.

Contoh:

IsMatch( "HELLO!", "hello", MatchOptions.IgnoreCase )
// returns true

IsMatch( "file://c:/temp/info.txt", "^FILE://", MatchOptions.IgnoreCase )
// returns true

Sebagian besar bagian atau Power Fx sadar budaya, tetapi tidak di sini. Menggunakan pencocokan invarian budaya adalah standar industri untuk ekspresi reguler, termasuk di JavaScript dan Perl. Ini berguna dalam contoh kedua di mana sumber daya sistem dicocokkan, misalnya, tr-TR budaya di mana I tidak setara dengan huruf besar dari i.

Jika diperlukan pencocokan yang sadar budaya dan tidak peka huruf besar/kecil, gunakan class karakter dengan karakter yang cocok, misalnya [Hh][Ee][Ll][Ll][Oo] untuk contoh pertama.

Multi baris

Diaktifkan dengan MatchOptions.Multiline atau (?m) di awal ekspresi reguler.

Biasanya, ^ dan $ jangkar cocok dengan awal dan teks input. Dengan pengubah Multiline , jangkar ini cocok dengan awal dan akhir baris dalam teks input, di mana setiap baris diakhiri dengan \r, \n, \r\n, atau akhir input. Contoh:

MatchAll( "Hello" & Char(13) & Char(10) & "World", "^.+$" )
// returns 
// "Hello"

Pola yang ditentukan sebelumnya

Pola yang telah ditentukan sebelumnya memungkinkan Anda mencocokkan salah satu dari sekumpulan karakter atau urutan beberapa karakter. Gunakan operator string-concatenation& untuk menggabungkan string teks Anda dengan anggota enum Match :

Enum kecocokan Description Ekspresi reguler
Setiap Mencocokkan karakter apa pun. .
Koma Cocok dengan koma ,. ,
Jari Cocok dengan satu digit (0 melalui 9 dan anggota \p{Nd} lainnya). \d
Email Mencocokkan alamat email yang berisi simbol "at" (@) dan nama domain yang berisi setidaknya satu titik (.), yang dibatasi oleh spasi kosong dan karakter tanda baca. Lihat catatan
Tanda hubung Mencocokkan tanda hubung. - Lihat catatan
Kiri Paren Cocok dengan 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}+
MultipelRuang Bukan Mencocokkan satu atau beberapa karakter yang tidak menambahkan spasi (bukan spasi, tab, atau baris baru). \S+
Beberapa Ruang Mencocokkan satu atau beberapa karakter yang menambahkan spasi (bukan spasi, tab, atau baris baru). \s+
Non-Ruang Cocok dengan satu karakter yang tidak menambahkan spasi. \S
Digit Opsional Mencocokkan nol, satu, atau beberapa digit. \d*
Surat Opsional Mencocokkan nol, satu, atau beberapa huruf. \p{L}*
OpsionalNonSpasi Mencocokkan nol, satu, atau beberapa karakter yang tidak menambahkan spasi. \S*
Spasi Opsional Mencocokkan nol, satu, atau beberapa karakter yang menambahkan spasi. \s*
Masa Cocok dengan titik atau titik .."). \.
KananParen Cocok dengan tanda kurung ) kanan. \)
Antariksa Mencocokkan karakter yang menambahkan spasi. \s
Tab Cocok dengan karakter tab. \t

Misalnya, pola "A" & Match.MultipleDigits cocok dengan huruf "A" diikuti oleh satu atau lebih digit.

Pola Match.Email lebih kompleks daripada yang lain. Ini mendeteksi dan mengekstrak alamat email umum dalam formulir local@hostname.tld, mungkin dari bagian teks yang panjang, dan mendukung karakter dan emoji internasional. Gunakan untuk memvalidasi formulir yang mengambil alamat email sebagai input, sebagai pengujian cepat bahwa input tersebut ada dalam formulir email. Jika Anda tidak mengekstrak, gunakan MatchOptions.Complete untuk mendeteksi alamat email, misalnya, dalam kontrol input teks.

Namun, Match.Email tidak memvalidasi bahwa alamat email sesuai dengan semua banyak standar yang berkembang untuk alamat email, nama domain, dan domain tingkat atas yang memerlukan ekspresi reguler yang rumit yang perlu diperbarui dari waktu ke waktu. Meskipun sebagian besar alamat email diperlakukan seperti yang diharapkan, Match.Email cocok dengan beberapa kasus yang tidak valid, seperti garis bawah di nama host, dan tidak cocok dengan beberapa kasus yang valid, seperti alamat email atau alamat IP yang dikutip. Jika diperlukan, ada banyak ekspresi reguler di web untuk mendeteksi alamat email yang benar-benar legal. Selalu uji ekspresi reguler Anda untuk kebutuhan spesifik Anda sebelum digunakan dalam produksi.

Jika Anda ingin melihat ekspresi reguler yang digunakan, evaluasi rumusnya Text( Match.Email ). Bagian pertama cocok dengan karakter sebelum @ dan tidak termasuk tanda baca ASCII umum sesuai RFC 822 dan revisi serta tanda baca awal dan akhir Unicode untuk ekstraksi yang lebih mudah, seperti (, [, , «, dan . Itu tidak mendukung penggunaan string atau komentar yang dikutip yang tidak biasa dan tidak dianjurkan. Setelah itu @, bagian kedua dan ketiga dari ekspresi reguler adalah sama dan dipisahkan oleh a ., memastikan bahwa selalu ada setidaknya satu . dalam alamat. Bagian-bagian ini mengecualikan semua tanda baca Unicode kecuali untuk ., -, dan _. Alamat IP tidak didukung. Di seluruh alamat email, karakter dan emoji internasional didukung.

In Power Apps, saat tidak menggunakan Power Fx 1.0,Match.Email dan Match.Hyphen memiliki definisi yang sedikit berbeda. Match.Email lebih sederhana, tetapi tidak cocok untuk mengekstrak alamat email karena menangkap ruang. Sebelumnya, Match.Hyphen melarikan diri dari kelas karakter yang sekarang ilegal.

SubPertandingan Bernomor

Diaktifkan dengan MatchOptions.NumberedSubMatches tanpa opsi sebaris. (?n) didukung sebagai kebalikan dari opsi ini untuk kompatibilitas dan merupakan default.

Secara default, (...) tidak menangkap, setara dengan apa yang disebut sebagian besar sistem sebagai "penangkapan eksplisit". Untuk menangkap, gunakan tangkapan bernama dengan (?<name>...) referensi \k<name> balik. Menggunakan tangkapan bernama meningkatkan performa dengan tidak menangkap grup yang tidak diperlukan, meningkatkan kejelasan dengan menggunakan nama, dan tidak rentan terhadap kesalahan jika posisi pengambilan berubah.

Jika Anda memiliki ekspresi reguler yang ada, itu mungkin bergantung pada grup yang diambil secara otomatis dan diberi nomor, termasuk referensi belakang bernomor. Perilaku ini tersedia dengan menggunakan opsi MatchOptions.NumberedSubMatchs .

Submatch bernama dan bernomor tidak dapat digunakan bersama. Karena beberapa implementasi memperlakukan campuran grup penangkapan bernomor dan bernama secara berbeda, tidak mengizinkannya. Power Fx

Mungkin submatch kosong

Seperti yang dinyatakan dalam pendahuluan, Power Fx ekspresi reguler sengaja dibatasi pada fitur yang dapat diimplementasikan secara konsisten pada .NET, JavaScript, dan mesin ekspresi reguler bahasa pemrograman lainnya. Kesalahan waktu penulisan mencegah penggunaan fitur yang bukan bagian dari kumpulan ini.

Salah satu area yang dapat berbeda antar implementasi adalah bagaimana submatch kosong ditangani. Misalnya, pertimbangkan ekspresi (?<submatch>a*)+ reguler yang diminta untuk mencocokkan teks a. Di .NET, submatch menghasilkan string teks kosong, sedangkan di JavaScript menghasilkan a string teks kosong. Keduanya dapat diperdebatkan sebagai implementasi yang benar, karena + pengukur dapat puas dengan string kosong karena konten grup memiliki * kuantifier.

Untuk menghindari hasil yang berbeda di seluruh Power Fx implementasi, submatch yang mungkin kosong tidak dapat digunakan dengan quantifier. Berikut adalah contoh bagaimana submatch bisa kosong:

Contoh Description
(?<submatch>a{0,}b*)+ Semua konten submatch bersifat opsional, sehingga seluruh submatch mungkin kosong.
((<submatch>a)?b)+ Karena ? di luar submatch, submatch secara keseluruhan bersifat opsional.
(?<submatch>a|b*)+ Pergantian dalam subpertandingan dengan sesuatu yang bisa kosong dapat mengakibatkan seluruh subpertandingan menjadi kosong.
((?<submatch>a)|b)+ Pergantian di luar submatch dapat cocok b dalam hal ini submatch akan kosong.

Submatch in (?<submatch>a+)+ tidak dapat kosong karena harus ada setidaknya satu a dalam submatch, dan didukung.

Ekasandi

Power Fx ekspresi reguler menggunakan kategori Unicode untuk menentukan \w, \d, dan \s, dengan kategori tertentu yang tersedia melalui \p{..}.

Definisi ini mungkin bervariasi di seluruh platform. Misalnya, standar Unicode diperbarui dari waktu ke waktu dengan karakter baru yang nantinya akan diterapkan oleh platform dengan kecepatan mereka sendiri. Harapkan variasi hasil antar platform hingga semua platform diperbarui.

Power Fx ekspresi reguler memastikan informasi kategori selalu tersedia untuk Bidang Multibahasa Dasar (karakter U+0 hingga U+ffff). Beberapa platform tidak menerapkan kategori untuk karakter di Bidang Multibahasa Tambahan dan seterusnya (U+10000 hingga U+10ffff). Batasan ini biasanya tidak menjadi perhatian karena karakter dalam Bidang Multibahasa Dasar adalah yang paling umum digunakan. Gunakan nilai karakter secara langsung, bukan kategori jika skenario Anda melibatkan karakter pada atau di luar U+10000. Uji ekspresi reguler Anda di platform yang ingin Anda gunakan.

Perbedaan kasus tepi kecil mungkin ada antar platform. Misalnya, beberapa platform mungkin tidak terlihat ſ cocok s saat MatchOptions.IgnoreCase dipanggil. Jika karakter ini penting untuk skenario Anda, gunakan kelas karakter yang disukai [ſsS] untuk mencocokkan huruf besar/kecil secara tidak sensitif dan secara eksplisit menyertakan karakter yang diinginkan.