Tutorial C# Regex ini menerangkan apakah ungkapan biasa dalam C#, sintaksnya, kaedah kelas Regex dan cara menggunakan kaedah ini dengan bantuan contoh:
Ungkapan biasa dalam C# digunakan untuk memadankan corak aksara tertentu. Ungkapan biasa digunakan apabila pengguna perlu mencari beberapa corak berulang atau melakukan pengesahan data atau bahkan untuk menyemak pemformatan data.
RegEx digunakan untuk mencari sama ada rentetan mengandungi atau sepadan dengan corak aksara tertentu. Regex ialah jujukan aksara terutamanya yang menunjukkan corak.
Corak boleh terdiri daripada apa-apa sahaja daripada nombor, aksara atau gabungan kesemuanya. Regex digunakan secara meluas untuk pengesahan. Menghuraikan atau memadankan rentetan, contohnya, mencari sama ada rentetan sepadan dengan format mata wang, nombor telefon atau format tarikh.
Kelas Regex Dalam C#
Kelas regex digunakan dalam C# untuk melaksanakan operasi regex. Ia mengandungi beberapa kaedah berbeza yang boleh digunakan untuk melaksanakan operasi berbeza yang berkaitan dengan regex.
Ia boleh digunakan untuk menghuraikan teks besar untuk mencari jujukan aksara tertentu dengan menggunakan kaedah yang boleh digunakan untuk melaksanakan padanan, untuk gantikan atau boleh digunakan untuk memisahkan jujukan aksara.
Kelas regex hadir di dalam ruang nama; System.Teks.RegularExpression. Kelas menerima rentetan dalam bentuk jujukan aksara sebagai parameter.
Kaedah Regex C#
yang kami cipta “^Super” boleh dipadankan dengan semua nilai super, malah superman atau ghaib tetapi kami tidak hanya mahu perkataan “Super”.
Ini bermakna perlu ada ruang putih selepas perkataan to tandakan akhir perkataan dan permulaan perkataan lain. Untuk berbuat demikian, kami akan menambah simbol “\s” pada corak dan dengan itu menjadikan corak terakhir kami sebagai
^Super\s
Senario 3: Gunakan ungkapan Biasa untuk mencari fail yang sah nama dengan sambungan jenis fail imej.
Satu lagi senario masa nyata penting yang sering dihadapi oleh pembangun ialah pengesahan jenis fail. Katakan kami mempunyai butang muat naik dalam UI, yang hanya boleh menerima sambungan jenis fail imej.
Kami perlu mengesahkan fail muat naik pengguna dan memaklumkannya sekiranya dia memuat naik format fail yang salah. Ini boleh dicapai dengan mudah dengan menggunakan ungkapan Biasa.
Diberikan di bawah ialah atur cara mudah untuk menyemak ini.
public static void Main(string[] args) gif)$"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("abc.jpg")); Console.WriteLine(reg.IsMatch("ab_c.gif")); Console.WriteLine(reg.IsMatch("abc123.png")); //When pattern doesnt match Console.WriteLine(reg.IsMatch(".jpg")); Console.WriteLine(reg.IsMatch("ask.jpegj"));
Output
Benar
Betul
Benar
Salah
Salah
Penjelasan
Di sini kita perlu memadankan nama fail. Nama fail yang sah terdiri daripada tiga bahagian ( nama fail + . + sambungan fail ). Kita perlu mencipta ungkapan biasa untuk memadankan ketiga-tiga bahagian. Mari kita mulakan dengan memadankan bahagian pertama iaitu nama fail. Nama fail boleh mengandungi aksara abjad angka dan khas.
Seperti yang dibincangkan sebelum ini, simbol untuk menandakan iaitu “\w”. Selain itu, nama fail boleh terdiri daripada satu atau lebihdiikuti dengan titik (.) kemudian nama tapak web selepas itu titik (.) dan pada akhirnya sambungan domain.
Jadi, sama seperti senario sebelumnya, kami akan cuba memadankannya bahagian demi bahagian . Mari mulakan dengan memadankan "www." Bahagian. Jadi kita mulakan dengan simbol permulaan, kemudian sebagai "www." Ia adalah sesuatu yang telah ditetapkan, jadi kami menggunakan simbol permulaan diikuti dengan perkataan yang tepat untuk dipadankan.
“^www.”
Kemudian kami akan mula mengerjakan bahagian kedua. Bahagian kedua alamat web boleh berupa nama alfanumerik. Jadi, di sini kita akan menggunakan kurungan segi empat sama yang terdapat dalam kelas aksara untuk menentukan julat yang perlu dipadankan. Selepas menambah bahagian kedua dengan bahagian kedua akan memberi kami.
“^www.[a-zA-Z0-9]{3,20}”
Di sini kami juga telah menambah pendakap kerinting untuk menentukan panjang aksara minimum dan maksimum untuk nama tapak web. Kami telah memberikan sekurang-kurangnya 3 dan maksimum 20. Anda boleh memberikan mana-mana panjang minimum atau maksimum yang anda inginkan.
Kini, setelah menutup bahagian pertama dan kedua alamat web, kami hanya tinggal yang terakhir bahagian, iaitu sambungan domain. Ia agak serupa dengan apa yang kami lakukan dalam senario terakhir, kami akan memadankan terus dengan sambungan domain dengan menggunakan OR dan melampirkan setiap sambungan domain yang sah di dalam kurungan bulat.
Oleh itu, jika kami menambah semua ini bersama-sama, kami akan mempunyai ungkapan biasa yang lengkap untuk memadankan mana-mana alamat web yang sah.
www.[a-zA-Z0-9]{3,20}.(com|in|org|co\.in|net|dev)$
Senario 5: Gunakan ungkapan Biasa untuk mengesahkanformat id e-mel
Anggapkan kami mempunyai borang log masuk pada halaman web kami yang meminta pengguna memasukkan alamat e-mel mereka. Atas sebab yang jelas, kami tidak mahu borang kami diteruskan dengan alamat e-mel yang tidak sah. Untuk mengesahkan sama ada alamat e-mel yang dimasukkan oleh pengguna adalah betul atau tidak, kami boleh menggunakan ungkapan biasa.
Diberikan di bawah ialah program mudah untuk mengesahkan alamat e-mel.
public static void Main(string[] args) { string patternText = @"^[a-zA-Z0-9\._-]{5,25}.@.[a-z]{2,12}.(com|org|co\.in|net)"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("[email protected]")); Console.WriteLine(reg.IsMatch("[email protected]")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("[email protected]")); }
Output
Benar
Benar
Salah
Penjelasan
A alamat e-mel yang sah mengandungi abjad, angka dan beberapa aksara khas seperti titik (.), sempang (-), dan garis bawah (_) diikuti dengan simbol “@” yang kemudiannya diikuti dengan nama domain dan sambungan domain.
Oleh itu, kita boleh membahagikan alamat e-mel kepada empat bahagian iaitu pengecam e-mel, simbol “@”, nama domain dan yang terakhir ialah sambungan domain.
Mari kita mulakan dengan menulis ungkapan biasa untuk bahagian pertama. Ia boleh menjadi abjad angka dengan beberapa aksara khas. Andaikan bahawa kita mempunyai saiz ungkapan antara 5 hingga 25 aksara. Sama seperti cara kami menulisnya sebelum ini (dalam senario e-mel), kami boleh menghasilkan ungkapan berikut.
^[a-zA-Z0-9\._-]{5,25}
Sekarang, beralih ke bahagian kedua. Ia agak mudah kerana kita hanya perlu memadankan satu simbol iaitu "@". Menambahnya pada ungkapan di atas memberi kita.
^[a-zA-Z0-9\._-]{5,25}.@
Beralih ke bahagian ketiga iaitu nama domain akan sentiasa menjadi siri yang lebih rendahperkataan yang sepadan, abjad, alamat tapak web, id e-mel dan juga jenis fail dan sambungan.
Senario ini agak berguna dalam pengesahan masa nyata input pengguna tanpa menulis banyak baris kod dan dengan itu membantu dalam menjimatkan masa dan mengurangkan kerumitan. Contoh ini telah digunakan untuk membimbing pengguna membuat set ungkapan biasa mereka sendiri dan dengan itu membantu mereka dalam mengendalikan beberapa senario lain yang berbeza.
Regex boleh menjadi mudah seperti menggunakan abjad atau angka untuk dipadankan dengan siri tertentu aksara atau kompleks dengan menggunakan gabungan aksara khas, pengkuantiti, kelas aksara, dsb. untuk mengesahkan format kompleks atau mencari corak tertentu dalam siri aksara.
Ringkasnya, ungkapan biasa adalah agak alat yang berkuasa untuk pengaturcara dan membantu dalam mengurangkan jumlah kod yang diperlukan untuk dicapai dalam pemadanan data atau tugas pengesahan.
IsMatchKaedah paling mudah dan paling berguna dalam kelas Regex ialah kaedah IsMatch. Kaedah ini mempunyai lebihan beban yang berbeza untuk melaksanakan pemadanan aksara berdasarkan parameter yang berbeza.
Yang paling mudah ialah
Ganti(Teks rentetan, Teks penggantian rentetan)
Kaedah ganti menerima dua parameter dan mengembalikan nilai rentetan. Parameter pertama ialah jujukan aksara atau regex yang anda mahu gunakan untuk padanan dan yang kedua ialah penggantian regex.
Kaedah ini berfungsi dengan mencari padanan teks yang diberikan dan kemudian menggantikannya dengan teks gantian yang disediakan oleh pengguna. Tandatangan kaedah ialah rentetan awam Ganti(teks rentetan, teks penggantian rentetan)
Rentetan awam[] Pisah(teks rentetan)
Kaedah pisah dari kelas regex menerima input rentetan sebagai parameter dan mengembalikan tatasusunan yang mengandungi subrentetan. Parameter yang diluluskan dalam kaedah ialah rentetan yang perlu dipecahkan.
Kaedah mencari corak input yang sepadan dalam rentetan dan setelah ia mengenal pasti sebarang corak yang sepadan, ia membelah rentetan di tempat itu kepada subrentetan yang lebih kecil dengan setiap corak padanan menjadi titik pecah. Kaedah itu kemudian mengembalikan tatasusunan yang mengandungi semua subrentetan.
Penggunaan Kaedah Regex C#
Mari kita lihat penggunaan kaedah ini dengan menulis atur cara mudah.
public static void Main(string[] args) { string patternText = "Hello"; Regex reg = new Regex(patternText); //IsMatch(string input) Console.WriteLine(reg.IsMatch("Hello World")); //IsMatch(string input, int index) Console.WriteLine(reg.IsMatch("Hello", 0)); //IsMatch(string input, string pattern) Console.WriteLine(Regex.IsMatch("Hello World", patternText)); //Replace(string input, string replacement) Console.WriteLine(reg.Replace("Hello World", "Replace")); //Split(string input, string pattern) string[] arr = Regex.Split("Hello_World_Today", "_"); foreach(string subStr in arr) { Console.WriteLine("{0}", subStr); } }
Keluaran di atasprogram
Benar
Benar
Benar
Ganti Dunia
Helo
Dunia
Hari ini
Penjelasan untuk kod di atas:
Pada permulaan program, kami telah mencipta objek dan untuk corak yang akan kami gunakan untuk pemadanan kod dalam input rentetan berikutnya, kami telah menggunakan pemformatan teks untuk memastikan perkara mudah pada mulanya tetapi jika anda selesa, anda boleh mula menggunakan corak ungkapan biasa. (Kami akan membincangkan corak ungkapan biasa secara terperinci semasa kami bergerak ke hadapan dalam tutorial ini)
Kemudian, kami akan menggunakan rentetan padanan untuk memasukkan faktor yang telah kami isytiharkan sebagai objek yang ditentukan dengan rentetan input dan jika ia sepadan maka ia akan kembali untuk mengembalikan false.
Kaedah seterusnya yang kami gunakan ialah IsMethod(input rentetan, indeks int). Kaedah ini menerima dua parameter, dan di sini kami menyediakan rentetan input dan indeks dari mana perlawanan harus dimulakan. Sebagai contoh, di sini kami ingin memulakan pemadanan dari permulaan rentetan input.
Kemudian kami menunjukkan penggunaan IsMatch(input rentetan, corak rentetan). Di sini kami menyediakan rentetan input maka kami ingin mencari bahawa jika teks corak terdapat dalam input atau tidak. Jika ia ada maka ia akan kembali benar (seperti dalam kes kami) jika tidak ia akan kembali palsu.
Kaedah lain yang kita bincangkan diganti. Kaedah ini agak berguna dalam program di mana anda ingin membuat perubahan pada data inputatau tukar format data sedia ada.
Di sini kami menyediakan dua parameter, yang pertama ialah rentetan input dan yang kedua ialah rentetan yang boleh digunakan untuk menggantikan rentetan sebelumnya. Kaedah ini juga menggunakan corak yang ditakrifkan dalam objek regex yang kami takrifkan sebelum ini.
Satu lagi kaedah penting yang kami gunakan, adalah berpecah. Kaedah ini digunakan untuk memisahkan rentetan yang diberikan berdasarkan beberapa corak berulang. Di sini, kami telah menyediakan rentetan "Hello_World_Today".
Katakanlah kami mahu mengalih keluar garis bawah daripada rentetan yang diberikan dan mendapatkan subrentetan. Untuk ini, kami menentukan parameter input dan kemudian kami memberikan corak yang perlu kami gunakan sebagai titik pemisahan. Kaedah ini mengembalikan tatasusunan dan kita boleh menggunakan gelung mudah seperti foreach untuk mendapatkan semula semua rentetan.
Sintaks Ungkapan Biasa
Terdapat beberapa sintaks yang berbeza seperti aksara khas, pengkuantiti, kelas aksara, dsb. yang boleh digunakan untuk memadankan corak tertentu daripada input yang diberikan.
Dalam bahagian tutorial ini, kita akan menyelam jauh ke dalam sintaks yang ditawarkan oleh regex dan akan cuba menyelesaikan beberapa senario kehidupan sebenar menggunakan mereka. Sebelum kami meneruskan, pastikan anda memperoleh idea asas regex dan kaedah berbeza yang tersedia dalam kelas regex.
Aksara Khas
Aksara khas dalam regex digunakan untuk memberikan beberapa makna yang berbeza kepada corak. Sekarang kita akan lihatbeberapa aksara khas yang digunakan secara meluas dan maknanya dalam Regex.3
Aksara khas | Maksud |
---|---|
Ini adalah salah satu sintaks yang paling banyak digunakan. Ia menandakan permulaan, perkataan atau corak selepas ini mula sepadan dari permulaan teks input. | |
$ | Tanda ini digunakan untuk memadankan perkataan dari hujung daripada rentetan. Perkataan/corak yang dilambangkan sebelum simbol ini akan sepadan dengan perkataan yang terdapat di hujung rentetan. |
. (dot) | Dot digunakan untuk memadankan satu aksara dalam rentetan yang diberikan yang berlaku sekali. |
\n | Ini digunakan untuk yang baharu baris. |
\d dan \D | Huruf kecil 'd' digunakan untuk memadankan aksara digit dan huruf besar 'D' digunakan untuk memadankan bukan digit aksara. |
\s dan \S | Huruf kecil 's' digunakan untuk memadankan ruang putih dan huruf besar 'S' digunakan untuk memadankan ruang bukan putih . |
\w dan \W | Huruf kecil 'w' digunakan untuk memadankan aksara alfanumerik/garis bawah dan huruf besar 'W' digunakan untuk memadankan bukan perkataan aksara. |
Sintaks Pengkuantiti
Sintaks pengkuantiti digunakan untuk mengira atau mengukur kriteria padanan. Sebagai contoh, jika anda ingin menyemak sama ada rentetan tertentu mengandungi abjad satu kali atau lebih. Mari kita lihat beberapa pengkuantiti yang biasa digunakan dalam ungkapan Biasa.
PengkuantitiSintaks | Maksud |
---|---|
* | Simbol ini digunakan untuk memadankan aksara sebelumnya. |
+ | Simbol ini digunakan untuk memadankan satu atau lebih aksara dalam satu baris. |
{n} | Digit berangka di dalam kerinting pendakap digunakan untuk memadankan nombor aksara sebelumnya yang ditakrifkan oleh angka dalam pendakap kerinting. |
{n,} | Angka di dalam pendakap kerinting dan simbol ini digunakan untuk memastikan ia sepadan dengan sekurang-kurangnya n (iaitu nilai angka dalam pendakap). |
{n, m} | Simbol ini digunakan untuk memadankan daripada aksara sebelumnya daripada n bilangan kali hingga m bilangan kali. |
? | Simbol ini menjadikan aksara sebelumnya sepadan sebagai pilihan. |
Kelas Aksara
Kelas aksara juga dikenali sebagai set aksara, dan ini digunakan untuk memberitahu enjin regex untuk mencari padanan tunggal daripada beberapa aksara. Kelas aksara akan memadankan hanya satu aksara dan susunan aksara yang disertakan dalam set aksara tidak penting.
Kelas Watak | Maksud |
---|---|
[ julat ] | Simbol kurungan segi empat sama digunakan untuk memadankan julat aksara. Sebagai contoh, kita boleh menggunakannya untuk mentakrifkan sebarang aksara dalam julat daripada abjad "a" hingga "z" dengan menyertakan julat di dalam kurungan seperti [a-z] Atau, kita juga boleh memadankan dengan angka "1" hingga " 9” dengan menandakanungkapan menggunakan beberapa contoh masa nyata. Senario 1: Sahkan jika rentetan input terdiri daripada aksara abjad tidak sensitif huruf besar 6 digit. Senario yang paling biasa untuk ungkapan biasa ialah mencari dan memadankan perkataan tertentu. Sebagai contoh, katakan saya mahukan rentetan abjad rawak daripada pengguna dan input itu hendaklah tepat 6 digit panjangnya. Untuk mengesahkan bahawa kita boleh menggunakan ungkapan biasa yang mudah. Mari kita tulis atur cara untuk memahami penulisan dan penggunaan ungkapan biasa dengan cara yang lebih baik. public static void Main(string[] args) { string patternText = @"^[a-zA-Z]{6}$"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("Helios")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("Helo")); } Output Benar Salah Penjelasan Dalam contoh ini, kami cuba mengesahkan rentetan input, untuk menyemak sama ada ia mengandungi aksara abjad enam digit. Aksara boleh dalam huruf kecil dan besar, jadi kita perlu mengambil kira perkara itu juga. Jadi, di sini kita menentukan corak ungkapan biasa dalam "patternText" pembolehubah dan kemudian menghantarnya ke objek regex . Sekarang, baris kod seterusnya agak mudah, kami menggunakan kaedah IsMatch untuk membandingkan ungkapan biasa dan rentetan input. Sekarang mari kita lihat ungkapan biasa yang telah kami reka. Ungkapan (^[a-zA-Z]{6}$) terdiri daripada 4 bahagian yang berbeza. “^”, “[a-zA-Z]”, “{6}” dan “$”. Bahagian kedua menunjukkan aksara yang sepadan, yang digunakan untuk melakukan pemadanan ungkapan, "a-z" untuk huruf kecil dan "A-Z" untuk huruf besar. Yang pertamaaksara bahagian “^” memastikan bahawa rentetan bermula dengan corak yang ditakrifkan dalam bahagian kedua iaitu abjad huruf kecil dan besar. Kurung kurawal di bahagian ketiga menentukan bilangan aksara dalam rentetan yang boleh dikenal pasti dengan corak yang ditentukan iaitu 6 dalam kes ini dan simbol “$” pastikan ia berakhir dengan corak yang ditakrifkan dalam bahagian kedua. ^[a-zA-Z]{6}$ Senario 2: Gunakan ungkapan Biasa untuk mengesahkan bahawa perkataan yang bermula dengan "Super" dan mempunyai ruang putih selepas itu iaitu untuk mengesahkan jika "Super" hadir pada permulaan ayat. Anggapkan kita membaca beberapa input pengguna dan perlu memastikan bahawa pengguna sentiasa memulakan ayat mereka dengan perkataan, nombor atau abjad tertentu. Ini boleh dicapai dengan agak mudah dengan menggunakan ungkapan biasa yang ringkas. Mari kita lihat contoh program dan kemudian bincangkan secara terperinci tentang cara menulis ungkapan ini. public static void Main(string[] args) { string patternText = @"^Super\s"; Regex reg = new Regex(patternText); //When pattern matches Console.WriteLine(reg.IsMatch("Super man")); //When pattern doesnt match Console.WriteLine(reg.IsMatch("Superhero")); } Output Benar Salah Penjelasan Dalam contoh ini juga, kami menggunakan persediaan kod yang serupa seperti yang kami lakukan dalam yang pertama. Corak ungkapan biasa dalam senario ini memerlukan pemadanan dengan gabungan perkataan atau ayat yang bermula dengan "Super". ^Super Jadi, seperti yang kita mahu padankan dari permulaan perkataan siri, kita akan mulakan dengan meletakkan simbol "^", kemudian akan memberikan corak yang kita mahu padankan, dalam kes ini, "Super". Sekarang corak[1-9] |
[^ julat] | Ini menandakan kelas aksara menafikan. Ia digunakan untuk memadankan apa-apa sahaja, bukan dalam julat yang dilambangkan di dalam kurungan. |
\ | Ini digunakan untuk memadankan aksara khas yang mungkin mempunyai simbol regex mereka sendiri. Tanda miring digunakan untuk memadankan aksara khas dalam bentuk literalnya. |
Pengumpulan
Kurungan bulat atau kurungan boleh digunakan untuk mengumpulkan sebahagian daripada biasa ekspresi bersama. Ini membenarkan pengguna untuk sama ada menambah pengkuantiti dengan ungkapan.
Mengumpulkan | Maksud |
---|---|
( kumpulan ungkapan ) | Kurungan bulat digunakan untuk mengumpulkan ungkapan. |
aksara jadi akan menggunakan simbol "+". Gabungkan mereka dan kami mendapat simbol untuk bahagian pertama. (\w+) Kurungan mengasingkan ini dalam beberapa bahagian. Bahagian seterusnya ialah simbol titik. Memandangkan simbol titik mempunyai maknanya dalam regex, kami akan menggunakan garis miring ke belakang sebelum ia untuk memberikan makna literal. Gabungkan kedua-duanya dan kami mempunyai dua bahagian pertama regex yang dilindungi. (\w+)\. Kini, untuk bahagian ketiga dan terakhir, kami boleh mentakrifkan terus sambungan fail yang diperlukan yang dipisahkan dengan “aksara abjad kes. Jika anda mahu, anda juga boleh memasukkan aksara angka atau huruf besar abjad tetapi untuk senario ini, kami akan menggunakan abjad huruf kecil. Jika kami menambah ungkapan untuk abjad huruf kecil dengan panjang antara 2 hingga 12 aksara, maka kita akan mempunyai ungkapan berikut. ^[a-zA-Z0-9\._-]{5,25}.@.[a-z]{2,12} Kini, kita hanya tinggal dengan ungkapan untuk sambungan domain, sama dengan senario keempat, kami akan mengendalikan beberapa sambungan domain tertentu. Jika anda mahu, anda boleh menambah lebih banyak daripadanya dengan memasukkannya ke dalam kurungan bulat dan memisahkannya dengan “ |