Khóa học lập trình C# căn bản

Serial tutorial hướng dẫn lập trình C# cơ bản

Regular Expression trong C# Regular Expression trong C# Regular Expression trong C# Regular Expression trong C# Regular Expression trong C# 5/5 (279 reviews)

Regular Expression trong C#

Đã đăng 2017-05-08 15:31:58 bởi Kteam
13 bình luận 26050 lượt xem
Regular Expression trong C# 5 /5 stars (6 reviews)
 

Dẫn nhập

Regular Expression hay tiếng Việt được gọi là Biểu thức chính quy, là một cấu trúc rất mạnh để mô tả một chuỗi theo cách thống nhất chung.

Regular Expression bao gồm tập hợp các ký tự, toán tử hay ký hiệu toán học nhằm biểu thị một chuỗi theo cấu trúc chung mà mọi người học theo. Có thể xem Regular Expression như một loại tiếng lóng dùng chung trong lập trình.

Bạn có thể trích lọc một hay nhiều chuỗi có cấu trúc chung từ một đoạn văn bản hay một chuỗi ra.

Bạn có thể tìm kiếm, thay đổi nội dung của chuỗi một cách dễ dàng. Thay vì phải ngồi cắt chuỗi mỏi mệt như trước đây.

Từ đây, với Regular Expression. Bạn hoàn toàn có thể trích lọc dữ liệu từ các đoạn html theo ý.

Cùng nhau tìm hiểu cách sử dụng Regular Expression cơ bản với Kteam nhé.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

  • Biết sơ về lập trình
  • Hiểu về chuỗi
  • Có khả năng tìm kiếm thêm thông tin trên internet tốt

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

  • Các ký hiệu của Regular Expression
  • Một số lớp hỗ trợ trong Regular Expression

Các ký hiệu của Regular Expression

Trước khi tìm hiểu về các ký hiệu chúng ta cùng xem qua một ví dụ mẫu để nắm được cấu trúc chung của Regular Expression

Chuỗi mẫu:

-howkteam.com-10092016-

Pattern:

\d{8}

Kết quả tìm kiếm:

10092016

Một cách nhìn khác:

-howkteam.com-10092016-

Hay một cách dễ nhớ

-howkteam.com-\d{8}-

Trong đó

\d là ký hiệu biểu thị cho số

{8} là biểu thị ký tự trước đó xuất hiện 8 lần

Vậy có thể đọc câu pattern này là: Tìm ra chuỗi con là dãy 8 số liên tiếp nhau.

>>> kết quả là trùng khớp.

Nếu bạn thay số 8 thành số 6 tức là pattern thành :

\d{6}

Thì kết quả sẽ thành 100920 hay

-howkteam.com-10092016-

Hay một cách dễ nhớ

-howkteam.com-\d{6}16-

Hay có thể mường tượng Regular Expression này như string.Format

Từ đây bạn có thể nhận thấy. Regular Expression bản chất là tìm ra một hoặc nhiều chuỗi con thỏa mãn cấu trúc chung được định ra.

Hay hiểu cách khác. Regular Expression là một tập khuôn mẫu định dạng chuỗi. Nhằm tìm kiếm chuỗi con một cách dễ dàng từ cấu trúc định dạng. (@@ càng đọc càng ngu người. Thôi tốt nhất không nên đọc dòng này. Xóa dòng này ra khỏi não nha mọi người).


Bảng các ký hiệu Regular Expression thông dụng

 

 

Mình sẽ dùng phần mềm RegEx tester để demo cho các bạn xem cách dùng Regular Expression nhé.

Link tải phần mềm ở cuối bài viết. (Tại website www.howteam.com)


Pattern .

Đại diện cho một ký tự bất kỳ. Ngoại trừ ký hiệu \n

Chuỗi mẫu:

-howkteam.com-10092016-

Pattern:

            .

Kết quả:

            Danh sách các ký tự xuất hiện trong chuỗi mẫu: {-,h,o,w,k,...,1,6,-}

Cách nhìn khác:

            Lấy ra từng từ bên trong chuỗi mẫu.

Hình minh họa:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern \d

Đại diện cho ký tự số. Tương đương pattern [0-9].

Chuỗi mẫu:

-howkteam.com-10092016-

Pattern:

            \d

Kết quả:

            Danh sách các số xuất hiện trong chuỗi mẫu: {1,0,0,9,2,0,1,6}

Cách nhìn khác:

            Lấy ra từng số bên trong chuỗi mẫu.

Hình minh họa:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern \D

Ký tự không phải số. Hay có thể hiểu là phủ định của \d

Chuỗi mẫu:

-howkteam.com-10092016-

Pattern:

            \D

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern \s

Ký tự khoảng trắng. Tương đương [\f\n\r\t\v]

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            com\s1009

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern \S

Ký tự không phải khoảng trắng. Tương đương phủ định của \s hay tương đương [^\f\n\r\t\v]

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            \S

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern \w

Ký tự word (gồm chữ cái và chữ số, dấu gạch dưới _ ) tương đương [a-zA-Z_0-9]

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            \w

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter

 


Pattern \W

Ký tự không phải word. Tương đương phủ định của \w hay [^a-zA-Z_0-9]

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            \W

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern ^

Bắt đầu một chuỗi hay một dòng

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

^-howkteam

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter

 


Pattern $

Kết thúc một chuỗi hay một dòng

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            16-$

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern \A

Bắt đầu môt chuỗi

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            \A-howkteam

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern \z

Kết thúc một chuỗi

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

16-\z

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern |

Ký tự so trùng tương đương với or. Dùng để kết hợp nhiều điều kiện.

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            k|h|9

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern [abc]

Khớp với một ký tự nằm trong nhóm này là a hay b hay c đều được.

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            [k9h]

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern [a-z]

Khớp với ký tự trong khoảng a đến z. az là ký tự hiện hữu trong bảng ASCII.

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            [1-8]

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern [^abc]

Không trùng bất kỳ ký tự a b hay c. Tương đương phủ định của [abc]

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            [^1-8]

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern ()

Xác định một  group. Một biểu thức đơn lẻ trong pattern.

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

([0-3])|([5-7])

Lấy ra tất cả các số trong khoảng [0-3] hoặc trong khoảng [5-7]

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern ?

Khớp với từ đứng trước xuất hiện 0 hay 1 lần.

Chuỗi mẫu:

-howkteam.com 10092016-

Lấy ra tất cả số 1 xuất hiện 0 hay 1 lần

Pattern:

            1?

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern *

Khớp với từ đứng trước 0 lần trở lên.

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            1*

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern +

Khớp với từ đứng trước 1 lần trở lên.

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            1+

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern {n}

Với n là số. Khớp với từ đứng trước xuất hiện đúng n lần.

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            0{2}

            Lấy ra các kết quả là một cặp số 0 liền nhau.

            Hãy thử với n là một giá trị số khác nhé.

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern {n,}

Với n là số. Khớp với từ đứng trước xuất hiện đúng n lần trở lên.

Chuỗi mẫu:

-howkteam.com 10092016-

Pattern:

            0{1,}

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Pattern {m,n}

Với m và n là số. Khớp với từ đứng trước xuất hiện từ m đến n lần.

Chuỗi mẫu:

-howkteam.com 100010092016-

Pattern:

            0{1,2}

Kết quả:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Một số lớp hỗ trợ trong Regular Expression

Match và MatchCollection

Khi áp dụng một biểu thức quy tắc lên một chuỗi mẫu nào đó thì kết quả trả về có thể là nhiều chuỗi con thoả mãn biểu thức quy tắc trên. Khi đó các chuỗi con sẽ được lưu vào trong 1 tập hợp có tên là MatchCollection, mỗi phần tử trong tập hợp là 1 biến có kiểu Match.

MatchCollection là 1 kiểu tập hợp chứa danh sách các đối tượng kiểu Match. Vì đây cũng là 1 tập hợp bình thường nên có thể thao tác như các tập hợp khác.

Một đối tượng kiểu Match sẽ chứa 1 chuỗi con kết quả, để xem chuỗi con kết quả này ta sẽ gọi phương thức ToString(). Ngoài ra nó cũng có các thuộc tính và phương thức khác như:

Ví dụ sử dụng Match MatchCollection:

Cho chuỗi gốc là “-howkteam.com 10092016-”. Giả sử bạn muốn lấy ra tất cả các số trong chuỗi. Vậy pattern của chúng ta đơn giản chỉ là “\d”.

Nếu bạn chỉ viết code đơn gian thế này:

Regex reg = new Regex(@"\d");
Match result = reg.Match("-howkteam.com 10092016-");
Console.WriteLine(result.ToString());

Thì kết quả sẽ như sau:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter

Chúng ta mong muốn lấy ra tất cả các số chứ không phải 1 số thế này! Đến đây có bạn sẽ làm như sau:

Regex reg = new Regex(@"\d"); // Tạo 1 đối tượng Regex chứa pattern của mình
            Match result = reg.Match("-howkteam.com 10092016-"); // Tạo 1 đối tượng Match để chứa kết quả.

            do
            {
                Console.WriteLine(result.ToString());
                result = result.NextMatch(); // Chuyển qua kết quả trùng khớp kế tiếp
            }
            while (result != Match.Empty); // Kiểm tra xem đã hết kết quả trùng khớp chưa

Kết quả khi chạy đoạn code trên:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter

Kết quả có vẻ như ý rồi nhưng ta có thể thấy code không mấy gọn gàng cũng như mất thời gian xử lý ở chỗ hàm NextMatch().

Đến đây ta thử sử dụng MatchCollection đã được .NET hỗ trợ sẵn xem thế nào:

Regex reg = new Regex(@"\d");
foreach (Match item in reg.Matches("-howkteam.com 10092016-"))
{
     Console.WriteLine(item.ToString());
}

Để ý là lúc này ta dùng hàm Matches() để lấy kết quả chứ không phải Match(). Matches() trả về 1 tập hợp các đối tượng Match (MatchCollection) nên ta có thể dùng foreach để duyệt tập hợp (cú pháp của foreach các bạn có thể tham khảo bài FOREACH TRONG C# trong series LẬP TRÌNH C# CƠ BẢN)

Kết quả khi chạy vẫn giống như cách trên:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter

Lưu ý:

Nếu như không tìm thấy chuỗi con phù hợp thì sẽ trả về 1 đối tượng Match có giá trị rỗng chứ không phải null. Khi đó để kiểm tra có giá trị hay không ta sẽ sử dụng:

if (result == Match.Empty)
{ 
     // Câu lệnh
}

Group và GroupCollection

Group trong Regular Expression là chỉ cách ta gom nhóm các biểu thức lại thành cụm và có thể đặt tên cho nhóm để dễ quản lý và thao tác.

Lớp Group là 1 lớp đại diện cho 1 gom nhóm trong biểu thức. Có 1 điểm chúng ta nên biết là lớp Group là lớp cha của lớp Match!

Tại sao lại có khái niệm này? – Bởi vì:

  • Trong 1 kết quả trùng khớp sẽ có thể chứa nhiều thông tin khác nhau và ta mong muốn các thể lấy ra từng thành phần nhỏ trong đó mà không phải dùng thêm 1 biểu thức chính quy nào nữa.
  • Và trong biểu thức chính quy ban đầu ta sẽ gom nhóm các thành phần con thành các group và đặt tên cho chúng như vậy khi lấy được 1 chuỗi kết quả ta muốn lấy các thành phần con bên trong đó thì ta chỉ cần gọi chúng thông qua tên đã đặt.

Cú pháp:

(?<tên group>)

Trong đó:

( ): là cú pháp gom nhóm các biểu thức

?<tên group>: là cú pháp đặt tên cho group. Bạn có thể không đặt tên cho group cũng được. Lưu ý là tên group bạn phải viết liền không dấu và nên tuân theo quy tắc đặt tên.

Ví dụ:

Để lấy ra chuỗi giờ phút giây ta có thể làm như sau:

“\d+:\d+:\d+”

Nhưng nếu bây giờ mình muốn lấy ra giờ, phút, giây riêng để xử lý thì phải làm sao?

Nếu viết 3 biểu thức thì khá dài dòng. Khi đó ta sử dụng group và đặt tên cho chúng như sau:

(?<hours>\d+):(?<minutes>\d+):(?<seconds>\d+)

Trong đó “hours”, “minutes”, “seconds” là tên do mình đặt cho 3 group.

Để lấy ra danh sách các gom nhóm trong 1 chuỗi con kết quả ta dùng thuộc tính “Groups” trong lớp Match. Thuộc tính này trả về 1 GroupCollection. GroupCollection là 1 lớp chứa danh sách các gom nhóm trong biểu thức, mỗi phần tử của danh sách là 1 đối tượng kiểu Group.

Ví dụ sử dụng Group và GroupCollection:

// Tạo 1 biểu thức
            Regex re = new Regex(@"(?<hours>\d+):(?<minutes>\d+):(?<seconds>\d+)");

            /*
             * Duyệt qua các kết quả trùng khớp
             * Lấy ra giá trị của các group thông qua chỉ số phần tử là tên các group đã đặt trong biểu thức
             */
            foreach (Match item in re.Matches("30/04/2017 10:15:12 192.168.1.2"))
            {
                Console.WriteLine(" Match: " + item.ToString());
                Console.WriteLine(" Hours: " + item.Groups["hours"]);
                Console.WriteLine(" Minutes: " + item.Groups["minutes"]);
                Console.WriteLine(" Seconds: " + item.Groups["seconds"]);
            }

Kết quả khi chạy chương trình trên:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter

.NET đã hỗ trợ chúng ta truy xuất các phần tử trong danh sách GroupCollection thông qua chỉ số phần tử là tên các group chúng ta đã đặt trong biểu thức ở trên.


Capture và CaptureCollection

Mỗi khi tìm thấy bất kỳ 1 chuỗi con nào (bao gồm cả các group) thì C# sẽ bắt nó lại và lưu vào 1 đối tượng có kiểu Capture. Và danh sách tất cả các Capture chính là 1 CaptureCollection.

Một điểm cần biết nữa là Capture là lớp cha của lớp Group!

Tại sao lại có lớp Capture này? – Câu trả lời sẽ nằm trong tình huống sau:

  • Cho chuỗi sau “10:30:15 IBM 192.168.1.2 INTEL” hãy viết biểu thức lấy ra giờ phút giây, địa chỉ ip và tên công ty.

Lúc này ta sẽ có biểu thức sau:

“(?<times>(\d|:)+)\s(?<company>\S+)\s(?<ip>(\d|\.)+)\s(?<company>\S+)”

Lưu ý: là mình sẽ không tập trung vào giải thích chi tiết biểu thức mà tập trung vào cách sử dụng các lớp.

Ở đây mình có 2 tên công ty bên trong nên mình đặt chung 1 tên group là company với mong muốn lấy ra 2 tên công ty từ group.

Chương trình kiểm tra:

Regex RE = new Regex(@"(?<times>(\d|:)+)\s" + @"(?<company>\S+)\s" + @"(?<ip>(\d|\.)+)\s" + @"(?<company>\S+)");

            foreach (Match item in RE.Matches("10:30:15 IBM 192.168.1.2 INTEL"))
            {
                Console.WriteLine(" time: " + item.Groups["times"]);
                Console.WriteLine(" company: " + item.Groups["company"]);
                Console.WriteLine(" ip: " + item.Groups["ip"]);
                Console.WriteLine(" company: " + item.Groups["company"]);  
            }

Nhưng khi chạy chương trình kết quả lại như thế này:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter

Ta thấy có tới 2 công ty thoả mãn là INTEL và IBM nhưng chương trình chỉ in ra được INTEL. Chúng ta có thể kiểm tra bằng phần mềm RegEx Tester để chắc rằng biểu thức mình viết đúng:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter

Các bạn hãy để ý chỗ Group 4 (company) trong hình. Rõ ràng ta lấy ra được 2 giá trị nhưng chỉ hiển thị được giá trị sau cùng.

Đến đây có bạn sẽ nói rằng tại sao không đổi tên group khác đi là xong? Câu trả lời là trong ví dụ trên mình chỉ có 2 công ty nhưng giả sử có đến 100 công ty trong chuỗi thì sao? Bạn phải đặt 100 biến khác nhau?

Vì thế chúng ta sẽ tận dụng đặc điểm của Capture và sử dụng chúng để giải quyết.

Chương trình sẽ như sau:

Regex RE = new Regex(@"(?<times>(\d|:)+)\s" + @"(?<company>\S+)\s" + @"(?<ip>(\d|\.)+)\s" + @"(?<company>\S+)");
            foreach (Match item in RE.Matches("10:30:15 IBM 192.168.1.2 INTEL"))
            {
                Console.WriteLine(" time: " + item.Groups["times"]);
                Console.WriteLine(" ip: " + item.Groups["ip"]);
                Console.Write(" company: ");
                /*
                    Lấy ra tất cả các capture bắt được trong group company và duyệt lần lượt chúng
                 * Sau đó ta có thể sử dụng hàm ToString() hoặc thuộc tính Value để lấy giá trị của Capture
                 */
                foreach (Capture i in  item.Groups["company"].Captures)
                {
                    Console.Write(i.ToString() + " "); 
                }
                
            }

Ở đây để lấy ra danh sách các Capture (CaptureCollection) ta sử dụng thuộc tính Captures.

Kết quả khi chạy đoạn code trên:

kteam, howkteam, csharp,csharp basic, cSharp oop,regular expression, free Education, Share to be beter


Tải phần mềm

Bạn có thể tải phần mềm RegEx tester tại link bên dưới: 


Kết luận

Nội dung bài này giúp các bạn nắm được:

  • Các ký hiệu của Regular Expression
  • Một số lớp hỗ trợ trong Regular Expression

Như từ giờ bạn hoàn toàn tự tin để CRAWL DATA TỪ WEBSITE hay các chuỗi lớn rồi nhé.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.



Tài liệu 

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Regular Expression dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên like hoặc +1 Google để ủng hộ Kteam và tác giả nhé! 


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng. 

 

Chia sẻ:
Thảo luận Hỏi và đáp Báo lỗi bài viết
Hủy bỏ   hoặc  
Regular Expression trong C#
BH_uit 2018-07-31 21:15:41

Học xong khóa này sang OOP C# hay C# nâng cao trước anh ? 

0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
hphuc4244 2018-10-30 10:56:56
oop
0 bình chọn
Reply
Regular Expression trong C#
huynhlehoangduc 2017-11-22 17:22:59

Cái phần mềm trong link không có đâu

https://sourceforge.net/projects/regextester/files/

các bạn lên đây tải về nè.

0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
K9 2017-11-25 00:01:13
Đã cập nhật link lại. để nhầm project @@
0 bình chọn
Reply
Regular Expression trong C#
Trần Đình Tuấn 2017-11-16 21:59:08

Anh cho e hỏi, học xong series này thì học tiếp đến series nào ạ. Anh có thể cho e thứ tự học hợp lý trong series học lập trình C# được không ạ.

1 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
K9 2017-11-17 14:10:51
qua C# basic -&gt; winform =&gt; các bài trong serial lập trình .net =&gt; WPF
0 bình chọn
Reply
Regular Expression trong C#
Victor Lee 2017-11-16 21:28:11

Link phần mềm đâu á a? Cuối bài là link bài ko phải phần mềm

0 bình chọn
Reply
Regular Expression trong C#
PhuongLazy 2017-09-14 10:17:25

Cám ơn anh, loại string regex này hơi nâng cao nhưng dạy rất dễ hiểu !

1 bình chọn
Reply
Regular Expression trong C#
thanhtruong5390 2017-08-23 16:02:05

Rất hay và bổ ích, ah khi nào thì có bài C# nâng cao vậy bạn, cảm ơn KTeam

0 bình chọn
Reply
Regular Expression trong C#
tiendungstudent88 2017-07-22 16:22:06

Cập nhật thêm bài nữa đi anh. Ví dụ như bài "Tính kế thừa, tính đóng gói,..." Rất hay ạ

1 bình chọn
Reply
Regular Expression trong C#
Life Goals 2017-07-11 22:44:07

^_^ <3 Rất hay!

0 bình chọn
Reply
Regular Expression trong C#
Đức Master 2017-06-25 14:16:18

Bài viết rất chi tiết. Cảm ơn anh

0 bình chọn
Reply
Regular Expression trong C#
K9 2017-05-09 12:54:53

Test command

0 bình chọn
Reply
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  

Chiến dịch

Kteam - Howkteam Free Education