ការបង្រៀន C# Regex: តើអ្វីទៅជាកន្សោមធម្មតា C#

ការបង្រៀន C# Regex នេះពន្យល់ពីអ្វីដែលជាកន្សោមធម្មតានៅក្នុង C# វាក្យសម្ព័ន្ធរបស់វា វិធីសាស្រ្តថ្នាក់ Regex និងរបៀបប្រើវិធីសាស្រ្តទាំងនេះ ដោយមានជំនួយពីឧទាហរណ៍៖

កន្សោមធម្មតា នៅក្នុង C# ត្រូវបានប្រើសម្រាប់ការផ្គូផ្គងលំនាំតួអក្សរជាក់លាក់មួយ។ កន្សោម​ធម្មតា​ត្រូវ​បាន​ប្រើ​គ្រប់​ពេល​ដែល​អ្នក​ប្រើ​ត្រូវ​ការ​ស្វែង​រក​លំនាំ​ដដែលៗ ឬ​ធ្វើ​ការ​បញ្ជាក់​ទិន្នន័យ ឬ​សូម្បី​តែ​សម្រាប់​ពិនិត្យ​មើល​ការ​ធ្វើ​ទ្រង់ទ្រាយ​ទិន្នន័យ។

RegEx ត្រូវ​បាន​ប្រើ​ដើម្បី​រក​មើល​ថា​តើ​ខ្សែ​អក្សរ​មាន​ឬ​ត្រូវ​គ្នា​នឹង​លំនាំ​តួអក្សរ​ដែល​បាន​ផ្ដល់។ regex គឺជាលំដាប់តួអក្សរដែលតំណាងឱ្យលំនាំមួយ។

លំនាំអាចជាអ្វីដែលមានចាប់ពីលេខ តួអក្សរ ឬបន្សំទាំងអស់។ Regex ត្រូវបានគេប្រើយ៉ាងទូលំទូលាយសម្រាប់ការបញ្ជាក់។ ការញែក ឬការផ្គូផ្គងខ្សែអក្សរ ឧទាហរណ៍ ការស្វែងរកថាតើខ្សែអក្សរមួយត្រូវគ្នានឹងទម្រង់រូបិយប័ណ្ណ លេខទូរស័ព្ទ ឬទម្រង់កាលបរិច្ឆេទ។

Regex Class នៅក្នុង C#

ថ្នាក់ Regex ត្រូវបានប្រើនៅក្នុង C# ដើម្បីអនុវត្តប្រតិបត្តិការ regex ។ វាមានវិធីសាស្រ្តផ្សេងគ្នាជាច្រើនដែលអាចត្រូវបានប្រើដើម្បីអនុវត្តប្រតិបត្តិការផ្សេងគ្នាដែលទាក់ទងនឹង regex ។

វាអាចត្រូវបានប្រើដើម្បីញែកអត្ថបទធំដើម្បីស្វែងរកលំដាប់តួអក្សរជាក់លាក់មួយដោយប្រើវិធីសាស្រ្តដែលអាចត្រូវបានប្រើដើម្បីអនុវត្តការផ្គូផ្គង។ ជំនួស ឬអាចប្រើដើម្បីបំបែកលំដាប់តួអក្សរ។

ថ្នាក់ regex មានវត្តមាននៅខាងក្នុង namespace ។ System.Text.RegularExpression។ ថ្នាក់ទទួលយកខ្សែអក្សរក្នុងទម្រង់នៃលំដាប់តួអក្សរជាប៉ារ៉ាម៉ែត្រ។

C# Regex Methods

ដែលយើងបានបង្កើត “^Super” អាចត្រូវគ្នាជាមួយនឹងតម្លៃទាំងអស់នៃ super សូម្បីតែ superman ឬ supernatural ប៉ុន្តែយើងមិនគ្រាន់តែចង់បានពាក្យ “Super” នោះទេ។

នេះមានន័យថាគួរតែមានចន្លោះពណ៌សបន្ទាប់ពីពាក្យទៅ សម្គាល់ចុងបញ្ចប់នៃពាក្យ ហើយចាប់ផ្តើមពាក្យមួយទៀត។ ដើម្បីធ្វើដូច្នេះ យើងនឹងបន្ថែមនិមិត្តសញ្ញា “\s” ទៅលំនាំ ហើយដោយហេតុនេះបង្កើតលំនាំចុងក្រោយរបស់យើងជា

^Super\s

សេណារីយ៉ូ 3៖ ប្រើកន្សោមធម្មតាដើម្បីស្វែងរកឯកសារត្រឹមត្រូវ ឈ្មោះដែលមានផ្នែកបន្ថែមប្រភេទឯកសាររូបភាព។

សេណារីយ៉ូពេលវេលាជាក់ស្តែងដ៏សំខាន់មួយទៀតដែលអ្នកអភិវឌ្ឍន៍តែងតែជួបប្រទះគឺការធ្វើឱ្យមានសុពលភាពនៃប្រភេទឯកសារ។ ឧបមាថាយើងមានប៊ូតុងផ្ទុកឡើងនៅក្នុង UI ដែលអាចទទួលយកបានតែផ្នែកបន្ថែមប្រភេទឯកសាររូបភាពប៉ុណ្ណោះ។

យើងត្រូវធ្វើឱ្យឯកសារផ្ទុកឡើងរបស់អ្នកប្រើប្រាស់មានសុពលភាព និងជូនដំណឹងដល់គាត់ក្នុងករណីដែលគាត់បានបង្ហោះទម្រង់ឯកសារខុស។ វា​អាច​ត្រូវ​បាន​សម្រេច​បាន​យ៉ាង​ងាយ​ដោយ​ការ​ប្រើ​កន្សោម​ធម្មតា។

ផ្ដល់​ឱ្យ​ខាង​ក្រោម​ជា​កម្មវិធី​សាមញ្ញ​ដើម្បី​ពិនិត្យ​មើល​វា។

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")); 

លទ្ធផល

ពិត

True

True

False

False

ការពន្យល់

នៅទីនេះ យើងត្រូវផ្គូផ្គង a ឈ្មោះ​ឯកសារ។ ឈ្មោះឯកសារត្រឹមត្រូវមានបីផ្នែក ( ឈ្មោះឯកសារ + . + ផ្នែកបន្ថែមឯកសារ )។ យើងត្រូវបង្កើតកន្សោមធម្មតា ដើម្បីផ្គូផ្គងផ្នែកទាំងបី។ ចូរចាប់ផ្តើមដោយការផ្គូផ្គងផ្នែកទីមួយ ពោលគឺឈ្មោះឯកសារ។ ឈ្មោះឯកសារអាចមានអក្សរក្រមលេខ និងតួអក្សរពិសេស។

ដូចដែលបានពិភាក្សាមុននេះ និមិត្តសញ្ញាដែលត្រូវសម្គាល់នោះគឺ “\w”។ ដូចគ្នានេះផងដែរ ឈ្មោះឯកសារអាចមានមួយ ឬច្រើន។បន្តដោយចំនុច (.) បន្ទាប់មកឈ្មោះគេហទំព័របន្ទាប់ពីនោះចំនុច (.) និងនៅចុងបញ្ចប់ផ្នែកបន្ថែមដែន។

ដូច្នេះ ស្រដៀងទៅនឹងសេណារីយ៉ូមុន យើងនឹងព្យាយាមផ្គូផ្គងវាដោយផ្នែក . ចូរចាប់ផ្តើមដំបូងដោយការផ្គូផ្គង "www" ។ ផ្នែក។ ដូច្នេះយើងចាប់ផ្តើមដោយនិមិត្តសញ្ញាចាប់ផ្តើម បន្ទាប់មកជា "www" ។ វាជាអ្វីមួយដែលត្រូវបានជួសជុល ដូច្នេះយើងប្រើនិមិត្តសញ្ញាចាប់ផ្តើមដែលអមដោយពាក្យពិតប្រាកដដើម្បីផ្គូផ្គង។

“^www.”

បន្ទាប់មកយើងនឹងចាប់ផ្តើមធ្វើការលើផ្នែកទីពីរ។ ផ្នែកទីពីរនៃអាសយដ្ឋានគេហទំព័រអាចជាឈ្មោះអក្សរក្រមលេខណាមួយ។ ដូច្នេះនៅទីនេះ យើងនឹងប្រើតង្កៀបការ៉េដែលមាននៅក្នុងថ្នាក់តួអក្សរ ដើម្បីកំណត់ជួរដែលត្រូវផ្គូផ្គង។ បន្ទាប់ពីបន្ថែមផ្នែកទីពីរជាមួយនឹងផ្នែកទីពីរនឹងផ្តល់ឱ្យយើង។

“^www.[a-zA-Z0-9]{3,20}”

នៅទីនេះយើងក៏បានបន្ថែមដង្កៀបអង្កាញ់ដើម្បីកំណត់ប្រវែងតួអក្សរអប្បបរមា និងអតិបរមាសម្រាប់ឈ្មោះគេហទំព័រ។ យើងបានផ្តល់អប្បបរមា 3 និងអតិបរមា 20។ អ្នកអាចផ្តល់ប្រវែងអប្បបរមា ឬអតិបរមាណាមួយដែលអ្នកចង់បាន។

ឥឡូវនេះ ដោយបានគ្របដណ្តប់ផ្នែកទីមួយ និងទីពីរនៃអាសយដ្ឋានគេហទំព័រ យើងនៅសល់តែចុងក្រោយ ផ្នែក ពោលគឺផ្នែកបន្ថែមដែន។ វាស្រដៀងទៅនឹងអ្វីដែលយើងបានធ្វើនៅក្នុងសេណារីយ៉ូចុងក្រោយ យើងនឹងផ្គូផ្គងដោយផ្ទាល់ជាមួយផ្នែកបន្ថែមដែន ដោយប្រើ OR និងបិទរាល់ផ្នែកបន្ថែមដែនដែលមានសុពលភាពនៅខាងក្នុងតង្កៀបរាងជារង្វង់។

ដូច្នេះប្រសិនបើយើងបន្ថែមទាំងអស់នេះជាមួយគ្នា យើងនឹងមាន កន្សោមធម្មតាពេញលេញដើម្បីផ្គូផ្គងអាសយដ្ឋានគេហទំព័រដែលមានសុពលភាពណាមួយ។

www.[a-zA-Z0-9]{3,20}.(com|in|org|co\.in|net|dev)$

សេណារីយ៉ូទី 5៖ ប្រើកន្សោមធម្មតាដើម្បីធ្វើសុពលភាពទម្រង់លេខសម្គាល់អ៊ីមែល

សូមសន្មតថាយើងមានទម្រង់ចូលនៅលើគេហទំព័ររបស់យើង ដែលស្នើឱ្យអ្នកប្រើប្រាស់បញ្ចូលអាសយដ្ឋានអ៊ីមែលរបស់ពួកគេ។ សម្រាប់ហេតុផលជាក់ស្តែង យើងនឹងមិនចង់ឱ្យទម្រង់របស់យើងបន្តជាមួយអាសយដ្ឋានអ៊ីមែលដែលមិនត្រឹមត្រូវ។ ដើម្បីបញ្ជាក់ថាតើអាសយដ្ឋានអ៊ីមែលដែលបានបញ្ចូលដោយអ្នកប្រើប្រាស់ត្រឹមត្រូវឬអត់ យើងអាចប្រើកន្សោមធម្មតា។

ដែលបានផ្តល់ឱ្យខាងក្រោមគឺជាកម្មវិធីសាមញ្ញមួយដើម្បីធ្វើសុពលភាពអាសយដ្ឋានអ៊ីមែល។

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]")); }

លទ្ធផល

ពិត

ពិត

មិនពិត

ការពន្យល់

A អាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវមានអក្ខរក្រម លេខ និងតួអក្សរពិសេសមួយចំនួនដូចជា ចំនុច (.) សញ្ញា (-) និងសញ្ញាគូសក្រោម (_) អមដោយនិមិត្តសញ្ញា “@” ដែលបន្ទាប់មកបន្តដោយឈ្មោះដែន និងផ្នែកបន្ថែមដែន។

ដូច្នេះ យើងអាចបែងចែកអាសយដ្ឋានអ៊ីមែលជាបួនផ្នែក ពោលគឺ ការកំណត់អត្តសញ្ញាណអ៊ីមែល និមិត្តសញ្ញា “@” ឈ្មោះដែន និងចុងក្រោយជាផ្នែកបន្ថែមដែន។

តោះចាប់ផ្តើមដោយការសរសេរកន្សោមធម្មតាសម្រាប់ ផ្នែកដំបូង។ វាអាចជាលេខអាល់ហ្វាដែលមានតួអក្សរពិសេសមួយចំនួន។ សន្មតថាយើងមានទំហំកន្សោមចាប់ពី 5 ដល់ 25 តួអក្សរ។ ស្រដៀងគ្នាទៅនឹងរបៀបដែលយើងបានសរសេរវាពីមុន (នៅក្នុងសេណារីយ៉ូអ៊ីមែល) យើងអាចបង្ហាញការបញ្ចេញមតិខាងក្រោម។

^[a-zA-Z0-9\._-]{5,25}

ឥឡូវនេះ ផ្លាស់ទីទៅផ្នែកទីពីរ។ វាងាយស្រួលប្រៀបធៀប ព្រោះយើងត្រូវផ្គូផ្គងនិមិត្តសញ្ញាមួយ ពោលគឺ “@”។ ការបន្ថែមវាទៅក្នុងកន្សោមខាងលើផ្តល់ឱ្យយើង។

^[a-zA-Z0-9\._-]{5,25}.@

ការផ្លាស់ទីទៅផ្នែកទីបី i.e ឈ្មោះដែននឹងតែងតែជាស៊េរីទាបជាងពាក្យផ្គូផ្គង អក្សរក្រម អាសយដ្ឋានគេហទំព័រ លេខសម្គាល់អ៊ីមែល និងសូម្បីតែប្រភេទឯកសារ និងផ្នែកបន្ថែម។

សេណារីយ៉ូទាំងនេះមានសារៈប្រយោជន៍ណាស់ក្នុងការធ្វើឱ្យមានសុពលភាពពេលវេលាជាក់ស្តែងនៃធាតុចូលរបស់អ្នកប្រើប្រាស់ ដោយមិនចាំបាច់សរសេរកូដច្រើនជួរ ហើយដោយហេតុនេះអាចជួយសន្សំសំចៃពេលវេលា និង កាត់បន្ថយភាពស្មុគស្មាញ។ ឧទាហរណ៍ទាំងនេះត្រូវបានប្រើដើម្បីណែនាំអ្នកប្រើប្រាស់ឱ្យបង្កើតសំណុំកន្សោមធម្មតារបស់ពួកគេផ្ទាល់ ហើយដូច្នេះជួយពួកគេក្នុងការដោះស្រាយសេណារីយ៉ូផ្សេងៗជាច្រើនទៀត។

Regex អាចមានលក្ខណៈសាមញ្ញដូចជាការប្រើអក្ខរក្រម ឬលេខដើម្បីផ្គូផ្គងជាមួយនឹងស៊េរីដែលបានផ្តល់ឱ្យ។ តួអក្សរ ឬស្មុគ្រស្មាញ ដោយប្រើការរួមបញ្ចូលគ្នានៃតួអក្សរពិសេស បរិមាណ ថ្នាក់តួអក្សរ។ ឧបករណ៍ដ៏មានអានុភាពសម្រាប់អ្នកសរសេរកម្មវិធី និងជួយក្នុងការកាត់បន្ថយចំនួនកូដដែលទាមទារដើម្បីសម្រេចបាននៅក្នុងការផ្គូផ្គងទិន្នន័យ ឬកិច្ចការផ្ទៀងផ្ទាត់។

IsMatch

វិធីសាស្ត្រសាមញ្ញបំផុត និងមានប្រយោជន៍បំផុតនៅក្នុងថ្នាក់ Regex គឺជាវិធីសាស្ត្រ IsMatch ។ វិធីសាស្ត្រនេះមានការផ្ទុកលើសទម្ងន់ខុសៗគ្នាសម្រាប់អនុវត្តការផ្គូផ្គងតួអក្សរដោយផ្អែកលើប៉ារ៉ាម៉ែត្រផ្សេងៗគ្នា។

វិធីសាមញ្ញបំផុតគឺ

ជំនួស(អត្ថបទខ្សែអក្សរ អត្ថបទជំនួសខ្សែអក្សរ)

វិធីសាស្ត្រជំនួសទទួលយកពីរ ប៉ារ៉ាម៉ែត្រ និងត្រឡប់តម្លៃខ្សែអក្សរ។ ប៉ារ៉ាម៉ែត្រទីមួយគឺជាលំដាប់តួអក្សរ ឬ regex ដែលអ្នកចង់ប្រើសម្រាប់ការផ្គូផ្គង ហើយទីពីរគឺការជំនួស regex ។

វិធីសាស្ត្រនេះដំណើរការដោយការស្វែងរកការផ្គូផ្គងនៃអត្ថបទដែលបានផ្តល់ឱ្យ ហើយបន្ទាប់មកជំនួសវាដោយ អត្ថបទជំនួសដែលផ្តល់ដោយអ្នកប្រើប្រាស់។ ហត្ថលេខាវិធីសាស្រ្តគឺ ខ្សែអក្សរសាធារណៈ ជំនួស(អត្ថបទខ្សែអក្សរ ការជំនួសខ្សែអក្សរ)

ខ្សែអក្សរសាធារណៈ[] Split(អត្ថបទខ្សែអក្សរ)

វិធីសាស្ត្របំបែក ពីថ្នាក់ regex ទទួលយកការបញ្ចូលខ្សែអក្សរជាប៉ារ៉ាម៉ែត្រ ហើយត្រឡប់អារេដែលមានខ្សែអក្សររង។ ប៉ារ៉ាម៉ែត្រដែលបានឆ្លងកាត់ក្នុងវិធីសាស្រ្តគឺជាខ្សែអក្សរដែលត្រូវបំបែក។

វិធីសាស្ត្រនេះរកឃើញលំនាំបញ្ចូលដែលត្រូវគ្នានៅក្នុងខ្សែអក្សរ ហើយនៅពេលដែលវាកំណត់អត្តសញ្ញាណលំនាំដែលត្រូវគ្នានោះ វាបំបែកខ្សែអក្សរនៅកន្លែងនោះទៅជាខ្សែអក្សរតូចជាងជាមួយ លំនាំផ្គូផ្គងនីមួយៗគឺជាចំណុចបំបែក។ វិធីសាស្ត្រនេះត្រឡប់អារេដែលមានខ្សែអក្សររងទាំងអស់។

ការប្រើប្រាស់វិធីសាស្រ្ត Regex C#

តោះមើលការប្រើប្រាស់វិធីសាស្រ្តទាំងនេះដោយការសរសេរកម្មវិធីសាមញ្ញមួយ។

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); } }

លទ្ធផលខាងលើកម្មវិធី

ពិត

ពិត

ពិត

ជំនួសពិភពលោក

ជំរាបសួរ

ពិភពលោក

ថ្ងៃនេះ

ការពន្យល់សម្រាប់កូដខាងលើ៖

នៅពេលចាប់ផ្តើមកម្មវិធី យើងបានបង្កើតវត្ថុមួយ និងសម្រាប់លំនាំដែលយើងនឹងប្រើ សម្រាប់ការផ្គូផ្គងកូដនៅក្នុងការបញ្ចូលខ្សែអក្សរជាបន្តបន្ទាប់ យើងបានប្រើការធ្វើទ្រង់ទ្រាយអត្ថបទ ដើម្បីរក្សាភាពសាមញ្ញនៅដើមដំបូង ប៉ុន្តែប្រសិនបើអ្នកមានផាសុកភាព អ្នកអាចចាប់ផ្តើមប្រើទម្រង់កន្សោមធម្មតា។ (យើងនឹងពិភាក្សាអំពីលំនាំកន្សោមធម្មតាដោយលម្អិត នៅពេលយើងឆ្ពោះទៅមុខក្នុងមេរៀននេះ)

បន្ទាប់មក យើងនឹងប្រើខ្សែអក្សរដែលត្រូវគ្នាដើម្បីបញ្ចូលកត្តាដែលយើងបានប្រកាសថាជាវត្ថុដែលបានបញ្ជាក់ជាមួយនឹងខ្សែអក្សរបញ្ចូល ហើយប្រសិនបើវាត្រូវគ្នា បន្ទាប់មកវានឹងត្រលប់ទៅ false វិញ។

វិធីសាស្ត្របន្ទាប់ដែលយើងបានប្រើគឺ IsMethod(string input, int index)។ វិធីសាស្រ្តនេះទទួលយកប៉ារ៉ាម៉ែត្រពីរ ហើយនៅទីនេះយើងផ្តល់ខ្សែអក្សរបញ្ចូល និងលិបិក្រមពីកន្លែងដែលការប្រកួតត្រូវចាប់ផ្តើម។ ឧទាហរណ៍ នៅទីនេះ យើងចង់ចាប់ផ្តើមការផ្គូផ្គងពីការចាប់ផ្តើមនៃខ្សែអក្សរបញ្ចូល។

បន្ទាប់មកយើងបានបង្ហាញការប្រើប្រាស់ IsMatch (ការបញ្ចូលខ្សែអក្សរ លំនាំខ្សែអក្សរ)។ នៅទីនេះយើងបានផ្តល់ខ្សែអក្សរបញ្ចូលបន្ទាប់មកយើងចង់រកឱ្យឃើញថាតើអត្ថបទលំនាំមានវត្តមាននៅក្នុងការបញ្ចូលឬអត់។ ប្រសិនបើវត្តមានរបស់វា នោះវានឹងត្រឡប់ពិត (ដូចករណីរបស់យើង) បើមិនដូច្នេះទេ វានឹងត្រឡប់មិនពិត។

វិធីសាស្ត្រមួយទៀតដែលយើងពិភាក្សាត្រូវបានជំនួស។ វិធីសាស្ត្រនេះមានប្រយោជន៍ណាស់នៅក្នុងកម្មវិធីដែលអ្នកចង់ធ្វើការផ្លាស់ប្តូរទិន្នន័យបញ្ចូលឬផ្លាស់ប្តូរទម្រង់នៃទិន្នន័យដែលមានស្រាប់។

នៅទីនេះយើងផ្តល់ប៉ារ៉ាម៉ែត្រពីរ ដែលទីមួយគឺជាខ្សែអក្សរបញ្ចូល ហើយទីពីរគឺជាខ្សែអក្សរដែលអាចត្រូវបានប្រើដើម្បីជំនួសខ្សែអក្សរពីមុន។ វិធីសាស្ត្រនេះក៏ប្រើលំនាំដែលបានកំណត់នៅក្នុងវត្ថុ regex ដែលយើងបានកំណត់ពីមុន។

វិធីសាស្ត្រសំខាន់មួយទៀតដែលយើងបានប្រើគឺត្រូវបានបំបែក។ វិធីសាស្រ្តនេះត្រូវបានប្រើដើម្បីបំបែកខ្សែអក្សរដែលបានផ្តល់ឱ្យដោយផ្អែកលើលំនាំដែលកើតឡើងដដែលៗមួយចំនួន។ នៅទីនេះ យើងបានផ្តល់ខ្សែអក្សរ “Hello_World_Today”។

ឧបមាថាយើងចង់ដកសញ្ញាគូសចេញពីខ្សែអក្សរដែលបានផ្តល់ឱ្យ និងទទួលបានខ្សែអក្សររង។ ចំពោះបញ្ហានេះយើងបញ្ជាក់ប៉ារ៉ាម៉ែត្របញ្ចូលហើយបន្ទាប់មកយើងផ្តល់លំនាំដែលយើងត្រូវប្រើជាចំណុចបំបែក។ វិធីសាស្ត្រនេះត្រឡប់អារេមួយ ហើយយើងអាចប្រើរង្វិលជុំសាមញ្ញដូចជា foreach ដើម្បីទាញយកខ្សែអក្សរទាំងអស់។

វាក្យសម្ព័ន្ធការបញ្ចេញមតិធម្មតា

មានវាក្យសម្ព័ន្ធផ្សេងគ្នាជាច្រើនដូចជាតួអក្សរពិសេស បរិមាណ ថ្នាក់តួអក្សរ។ ល. ដែលអាចត្រូវបានប្រើដើម្បីផ្គូផ្គងលំនាំជាក់លាក់មួយពីការបញ្ចូលដែលបានផ្តល់ឱ្យ។

នៅក្នុងផ្នែកនៃមេរៀននេះ យើងនឹងសិក្សាឱ្យជ្រៅទៅក្នុងវាក្យសម្ព័ន្ធដែលផ្តល់ដោយ regex ហើយនឹងព្យាយាមដោះស្រាយស្ថានភាពជីវិតពិតមួយចំនួន។ ដោយប្រើពួកវា។ មុនពេលយើងបន្ត ត្រូវប្រាកដថាអ្នកទទួលបានគំនិតជាមូលដ្ឋាននៃ regex និងវិធីសាស្រ្តផ្សេងគ្នាដែលមាននៅក្នុងថ្នាក់ regex។

តួអក្សរពិសេស

តួអក្សរពិសេសនៅក្នុង regex ត្រូវបានប្រើដើម្បីផ្តល់អត្ថន័យផ្សេងគ្នាជាច្រើន។ ទៅជាគំរូមួយ។ ឥឡូវនេះយើងនឹងពិនិត្យមើលតួអក្សរពិសេសមួយចំនួនដែលត្រូវបានប្រើប្រាស់យ៉ាងទូលំទូលាយ និងអត្ថន័យរបស់វានៅក្នុង Regex.3

តួអក្សរពិសេស អត្ថន័យ
^ នេះគឺជាវាក្យសម្ព័ន្ធមួយដែលត្រូវបានប្រើប្រាស់យ៉ាងទូលំទូលាយបំផុត។ វាតំណាងឱ្យការចាប់ផ្តើម ពាក្យ ឬលំនាំបន្ទាប់ពីវាចាប់ផ្តើមត្រូវគ្នាពីការចាប់ផ្តើមនៃអត្ថបទបញ្ចូល។
$ សញ្ញានេះត្រូវបានប្រើសម្រាប់ការផ្គូផ្គងពាក្យពីចុងបញ្ចប់ នៃខ្សែអក្សរ។ ពាក្យ/លំនាំដែលតំណាងនៅពីមុខនិមិត្តសញ្ញានេះនឹងផ្គូផ្គងជាមួយពាក្យដែលមាននៅចុងបញ្ចប់នៃខ្សែអក្សរ។
។ (dot) Dot ត្រូវបានប្រើដើម្បីផ្គូផ្គងតួអក្សរតែមួយនៅក្នុងខ្សែអក្សរដែលបានផ្តល់ឱ្យដែលកើតឡើងម្តង។
\n វាត្រូវបានប្រើសម្រាប់ថ្មីមួយ បន្ទាត់។
\d និង \D អក្សរតូច 'd' ត្រូវបានប្រើដើម្បីផ្គូផ្គងតួអក្សរខ្ទង់ ហើយអក្សរធំ 'D' ត្រូវបានប្រើដើម្បីផ្គូផ្គងមិនមែនខ្ទង់ តួអក្សរ។
\s និង \S អក្សរតូច 's' ត្រូវបានប្រើដើម្បីផ្គូផ្គងចន្លោះពណ៌ស ហើយអក្សរធំ 'S' ត្រូវបានប្រើដើម្បីផ្គូផ្គងចន្លោះមិនពណ៌ស .
\w និង \W អក្សរតូច 'w' ត្រូវបានប្រើដើម្បីផ្គូផ្គងតួអក្សរអក្សរក្រមលេខ/គូសក្រោម ហើយអក្សរធំ 'W' ត្រូវបានប្រើដើម្បីផ្គូផ្គងមិនមែនជាពាក្យ តួអក្សរ។

វាក្យសម្ព័ន្ធបរិមាណ

វាក្យសម្ព័ន្ធបរិមាណត្រូវបានប្រើដើម្បីរាប់ ឬកំណត់បរិមាណលក្ខណៈវិនិច្ឆ័យដែលត្រូវគ្នា។ ឧទាហរណ៍ ប្រសិនបើអ្នកចង់ពិនិត្យមើលថាតើខ្សែអក្សរជាក់លាក់ណាមួយមានអក្ខរក្រមមួយដង ឬច្រើនដង។ សូមក្រឡេកមើល quantifiers មួយចំនួនដែលប្រើជាទូទៅក្នុងកន្សោមធម្មតា។

Quantifierវាក្យសម្ព័ន្ធ អត្ថន័យ
* និមិត្តសញ្ញានេះត្រូវបានប្រើដើម្បីផ្គូផ្គងតួអក្សរមុន។
+ និមិត្តសញ្ញានេះត្រូវបានប្រើដើម្បីផ្គូផ្គងតួអក្សរមួយ ឬច្រើនក្នុងមួយជួរ។
{n} លេខតួរលេខនៅខាងក្នុងអង្កាញ់ ដង្កៀប​ត្រូវ​បាន​ប្រើ​ដើម្បី​ផ្គូផ្គង​ចំនួន​តួ​អក្សរ​មុន​ដែល​កំណត់​ដោយ​លេខ​នៅ​ក្នុង​ដង្កៀប​អង្កាញ់។
{n,} លេខ​នៅ​ក្នុង​ដង្កៀប​អង្កាញ់ និង​និមិត្តសញ្ញា​នេះ​ត្រូវ​បាន​ប្រើ ដើម្បីធ្វើឱ្យប្រាកដថាវាត្រូវគ្នាយ៉ាងហោចណាស់ n (ឧ. តម្លៃលេខនៅខាងក្នុងតង្កៀប)។
{n, m} និមិត្តសញ្ញានេះត្រូវបានប្រើសម្រាប់ការផ្គូផ្គងពីតួអក្សរមុនពី n ចំនួនដងទៅ m ចំនួនដង។
? និមិត្តសញ្ញានេះធ្វើឱ្យតួអក្សរមុនត្រូវគ្នាជាជម្រើស។

ថ្នាក់តួអក្សរ

ថ្នាក់តួអក្សរត្រូវបានគេស្គាល់ផងដែរថាជាសំណុំតួអក្សរ ហើយនេះត្រូវបានប្រើដើម្បីប្រាប់ម៉ាស៊ីន regex ឱ្យរកមើលការផ្គូផ្គងតែមួយក្នុងចំណោមតួអក្សរជាច្រើន។ ថ្នាក់តួអក្សរនឹងផ្គូផ្គងតួអក្សរតែមួយប៉ុណ្ណោះ ហើយលំដាប់នៃតួអក្សរដែលព័ទ្ធជុំវិញនៅក្នុងសំណុំតួអក្សរមិនមានបញ្ហាទេ។

17
ថ្នាក់តួអក្សរ អត្ថន័យ
[ range ] និមិត្តសញ្ញាតង្កៀបការ៉េត្រូវបានប្រើដើម្បីផ្គូផ្គងជួរនៃតួអក្សរ។ ឧទាហរណ៍ យើងអាចប្រើវាដើម្បីកំណត់តួអក្សរណាមួយក្នុងជួរពីអក្ខរក្រម “a” ដល់ “z” ដោយភ្ជាប់ជួរនៅខាងក្នុងតង្កៀបដូចជា [a-z]

ឬ យើងក៏អាចផ្គូផ្គងជាមួយលេខ “1” ទៅ “ 9” ដោយការសម្គាល់កន្សោម​ដោយ​ប្រើ​ឧទាហរណ៍​ក្នុង​ពេល​ពិត​មួយ​ចំនួន។

សេណារីយ៉ូ​ទី 1៖ ធ្វើ​ឲ្យ​មាន​សុពលភាព​ប្រសិនបើ​ខ្សែអក្សរ​បញ្ចូល​មាន​តួអក្សរ​អក្ខរក្រម​មិន​ប្រកាន់​អក្សរតូចធំ 6 ខ្ទង់។

សេណារីយ៉ូទូទៅបំផុតសម្រាប់ការបញ្ចេញមតិធម្មតាគឺការស្វែងរក និងផ្គូផ្គងពាក្យដែលបានផ្តល់ឱ្យ។ ឧទាហរណ៍ ឧបមាថា ខ្ញុំចង់បានអក្សរអក្ខរក្រមចៃដន្យពីអ្នកប្រើប្រាស់ ហើយការបញ្ចូលនោះគួរតែមាន 6 ខ្ទង់ពិតប្រាកដ។

ដើម្បីបញ្ជាក់ឱ្យឃើញថា យើងអាចប្រើកន្សោមធម្មតាធម្មតា។ ចូរយើងសរសេរកម្មវិធីមួយដើម្បីយល់ពីការសរសេរកន្សោមធម្មតា និងការប្រើប្រាស់តាមរបៀបដែលប្រសើរជាង។

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")); }

លទ្ធផល

ពិត

មិនពិត

ការពន្យល់

ក្នុងឧទាហរណ៍នេះ យើងកំពុងព្យាយាមធ្វើឱ្យមានសុពលភាពខ្សែអក្សរបញ្ចូល ដើម្បីពិនិត្យមើលថាតើវាមានតួអក្សរអក្ខរក្រមប្រាំមួយខ្ទង់ដែរឬទេ។ តួអក្សរអាចមានទាំងអក្សរតូច និងអក្សរធំ ដូច្នេះយើងត្រូវគិតគូរអំពីវាផងដែរ។

ដូច្នេះ នៅទីនេះយើងបានកំណត់លំនាំកន្សោមធម្មតានៅក្នុងអថេរ “patternText” ហើយបន្ទាប់មកបញ្ជូនវាទៅក្នុងវត្ថុ regex . ឥឡូវនេះ បន្ទាត់កូដបន្ទាប់គឺសាមញ្ញណាស់ យើងបានប្រើវិធីសាស្ត្រ IsMatch ដើម្បីប្រៀបធៀបកន្សោមធម្មតា និងខ្សែអក្សរបញ្ចូល។

ឥឡូវនេះ ចូរយើងពិនិត្យមើលកន្សោមធម្មតាដែលយើងបានបង្កើត។ កន្សោម (^[a-zA-Z]{6}$) ត្រូវបានបង្កើតឡើងដោយ 4 ផ្នែកផ្សេងគ្នា។ “^”, “[a-zA-Z]”, “{6}” និង “$” ។ ផ្នែកទីពីរបង្ហាញពីតួអក្សរដែលត្រូវគ្នា ដែលត្រូវបានប្រើដើម្បីអនុវត្តការផ្គូផ្គងកន្សោម "a-z" សម្រាប់អក្សរតូច និង "A-Z" សម្រាប់អក្សរធំ។

ទីមួយតួអក្សរផ្នែក “^” ធានាថាខ្សែអក្សរចាប់ផ្តើមដោយលំនាំដែលបានកំណត់នៅក្នុងផ្នែកទីពីរ ពោលគឺអក្សរតូច និងអក្សរធំ។

ដង្កៀបអង្កាញ់នៅផ្នែកទីបីកំណត់ចំនួនតួអក្សរក្នុងខ្សែអក្សរដែលអាចកំណត់អត្តសញ្ញាណបាន។ តាមលំនាំដែលបានកំណត់ ពោលគឺ 6 ក្នុងករណីនេះ និងនិមិត្តសញ្ញា “$” ត្រូវប្រាកដថាវាបញ្ចប់ដោយលំនាំដែលបានកំណត់នៅក្នុងផ្នែកទីពីរ។

^[a-zA-Z]{6}$

សេណារីយ៉ូទី 2៖ ប្រើកន្សោមធម្មតា ដើម្បីផ្ទៀងផ្ទាត់ពាក្យដែលចាប់ផ្តើមដោយ "Super" ហើយមានចន្លោះពណ៌សបន្ទាប់ពីនោះ មានន័យថា សុពលភាពប្រសិនបើ "Super" មានវត្តមាននៅដើមប្រយោគ។

ឧបមាថាយើងកំពុងអានការបញ្ចូលរបស់អ្នកប្រើប្រាស់មួយចំនួន ហើយត្រូវប្រាកដថាអ្នកប្រើប្រាស់តែងតែចាប់ផ្តើមប្រយោគរបស់ពួកគេជាមួយនឹងពាក្យ លេខ ឬអក្ខរក្រមជាក់លាក់ណាមួយ។ នេះអាចសម្រេចបានយ៉ាងងាយស្រួលដោយប្រើកន្សោមធម្មតាធម្មតា។

តោះមើលកម្មវិធីគំរូ ហើយបន្ទាប់មកពិភាក្សាលម្អិតអំពីរបៀបសរសេរកន្សោមនេះ។

 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")); }

លទ្ធផល

ពិត

មិនពិត

ការពន្យល់

ក្នុងឧទាហរណ៍នេះផងដែរ យើងបានប្រើការដំឡើងកូដស្រដៀងគ្នាដូចដែលយើងបានធ្វើនៅក្នុង ទីមួយ។ គំរូកន្សោមធម្មតានៅក្នុងសេណារីយ៉ូនេះតម្រូវឱ្យមានការផ្គូផ្គងជាមួយនឹងការរួមបញ្ចូលគ្នានៃពាក្យ ឬប្រយោគដែលចាប់ផ្តើមដោយ "Super"។

^Super

ដូច្នេះ ដូចដែលយើងចង់ផ្គូផ្គងពីដើមពាក្យ ស៊េរី យើងនឹងចាប់ផ្តើមដោយដាក់និមិត្តសញ្ញា “^” បន្ទាប់មកនឹងផ្តល់គំរូដែលយើងចង់ផ្គូផ្គង ក្នុងករណីនេះ “Super” ។ ឥឡូវនេះលំនាំ[1-9]

[^ range] វាតំណាងអោយថ្នាក់តួអក្សរអវិជ្ជមាន។ វាត្រូវបានប្រើដើម្បីផ្គូផ្គងអ្វីទាំងអស់ មិនមែននៅក្នុងជួរដែលតំណាងនៅខាងក្នុងតង្កៀបនោះទេ។
\ វាត្រូវបានប្រើដើម្បីផ្គូផ្គងតួអក្សរពិសេសដែលអាចមាននិមិត្តសញ្ញា regex ផ្ទាល់ខ្លួនរបស់ពួកគេ។ សញ្ញាក្បៀសត្រូវបានប្រើដើម្បីផ្គូផ្គងតួអក្សរពិសេសនៅក្នុងទម្រង់ព្យញ្ជនៈរបស់ពួកគេ។

ការដាក់ជាក្រុម

តង្កៀបជុំ ឬវង់ក្រចកអាចត្រូវបានប្រើដើម្បីដាក់ជាក្រុមនៃផ្នែកធម្មតា ការបញ្ចេញមតិរួមគ្នា។ វាអនុញ្ញាតឱ្យអ្នកប្រើបន្ថែមបរិមាណជាមួយនឹងកន្សោម។

ការដាក់ក្រុម អត្ថន័យ
(ក្រុម expression ) តង្កៀបមូលត្រូវបានប្រើសម្រាប់ដាក់ជាក្រុមកន្សោម។
តួអក្សរដូច្នេះនឹងប្រើនិមិត្តសញ្ញា "+" ។ ផ្សំពួកវា ហើយយើងទទួលបាននិមិត្តសញ្ញាសម្រាប់ផ្នែកទីមួយ។
(\w+)

តង្កៀបបានបំបែកវាជាផ្នែកៗ។ ផ្នែកបន្ទាប់គឺសញ្ញាចុច។ ដោយសារនិមិត្តសញ្ញាចំនុចមានអត្ថន័យរបស់វានៅក្នុង regex យើងនឹងប្រើសញ្ញាថយក្រោយមុនពេលវាផ្តល់ឱ្យវានូវអត្ថន័យព្យញ្ជនៈ។ ផ្សំទាំងពីរ ហើយយើងមានផ្នែកពីរដំបូងនៃ regex គ្របដណ្តប់។

(\w+)\.

ឥឡូវនេះ សម្រាប់ផ្នែកទីបី និងចុងក្រោយ យើងអាចកំណត់ដោយផ្ទាល់នូវផ្នែកបន្ថែមឯកសារដែលត្រូវការដោយបំបែកដោយ "តួអក្សរអក្សរក្រម។ ប្រសិនបើ​អ្នក​ចង់ អ្នក​ក៏​អាច​បញ្ចូល​តួអក្សរ​លេខ ឬ​អក្សរ​ធំ ប៉ុន្តែ​សម្រាប់​សេណារីយ៉ូ​នេះ យើង​នឹង​ប្រើ​អក្សរ​តូច។

ប្រសិនបើ​យើង​បន្ថែម​កន្សោម​សម្រាប់​អក្សរ​តូច​ដែល​មាន​ប្រវែង​ចាប់ពី 2 ដល់ 12 តួអក្សរ។ បន្ទាប់មកយើងនឹងមានកន្សោមដូចខាងក្រោម។

^[a-zA-Z0-9\._-]{5,25}.@.[a-z]{2,12}

ឥឡូវនេះ យើងនៅសល់តែកន្សោមសម្រាប់ផ្នែកបន្ថែមដែន ស្រដៀងនឹងសេណារីយ៉ូទីបួន យើងនឹងដោះស្រាយផ្នែកបន្ថែមដែនជាក់លាក់មួយចំនួន។ ប្រសិនបើ​អ្នក​ចង់ អ្នក​អាច​បន្ថែម​ពួកវា​បន្ថែម​ទៀត​ដោយ​ការ​រុំ​ពួកវា​ក្នុង​តង្កៀប​រាង​ជា​រង្វង់ ហើយ​បំបែក​ពួកវា​ដោយ​សញ្ញា "

អូសទៅកំពូល