Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 17 kết quả

Đề tài: Sử dụng Regular Expression trong lập trình C#

  1. #1
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Talking Sử dụng Regular Expression trong lập trình C#

    Nhớ lại cái hồi học C++, lúc ấy còn bé bỏng,ngây thơ, bị tụi bạn ra cái đề mắc toi sau: cho chuỗi s = "jdosdfijdsopfjdsofpjsofsjfpjfopdsafjsdohelloflkdjffjsf". Hãy viết ct xác định xem cái "hello" đó có tồn tại trong cái chuỗi trên ko. Hix, biết mình ngu thuật toán mà còn hỏi hả. Ôi, kỷ niệm ngày xưa yêu dấu. Bây giờ, nhớ lại,mà chợt cười thầm vì mình đã giải ra với chỉ 1 vài dòng lệnh, ủa, thuật toán chắc là khó lắm nhỉ? Ặc, chả có thuật toán nào cả, "với C#, ta có thể làm được tất cả mà" . Không luyên thuyên nữa, cho thử 1 ví dụ để mọi người xem sao nhé:
    Để sử dụng Regular Expression, trước tiên bạn phải thêm namespace sau:
    Code:
    using System.Text.RegularExpressions;
    Giả sử tớ có chuỗi sau:
    "NEVERLAND is C# novice"
    Bây giờ vấn đề đặt ra là làm sao xác định trong chuỗi có từ "NEVERLAND"
    Không có gì khó khăn, trước mắt cứ tạo 1 thể hiện của lớp Regex đã
    Visual C# Code:
    1. string s = "NEVERLAND is C# novice";
    2. Regex regex = new Regex("^NEVERLAND");

    Ủa, cái dấu "^" trước "NEVERLAND" có nghĩa gì vậy?À, cái dấu đó bảo cho thằng regex biết rằng "mày hãy tìm 1 chuỗi nào đó mà bắt đầu chuỗi đó bởi chuỗi con NEVERLAND"
    OK. Bây giờ sao nữa? Để xác định sự tồn tại, ta dùng phương thức IsMatch() của thằng regex. Cụ thể như sau:
    Visual C# Code:
    1.             if (regex.IsMatch(s))
    2.                 Console.WriteLine("Chuoi \"NEVERLAND\" ton tai trong: " + s);
    3.             else
    4.                 Console.WriteLine("Chuoi \"NEVERLAND\" khong ton tai trong: " + s);

    Phù,xong bước đầu, bây giờ thử sửa chuỗi s = "WAY DOWN IN NEVERLAND" xem có chuyện gì xảy ra nhé:
    Visual C# Code:
    1. string s = "WAY DOWN IN NEVERLAND";
    2. Regex regex = new Regex("^NEVERLAND");

    Kết quả có phải là: không tồn tại ==> sai rồi bác neverland ơi, rõ ràng có từ "NEVERLAND" mà
    Ai nói sai,tui chưa vận hết nội công mà . Tui thử mánh tiếp theo:
    Visual C# Code:
    1. string s = "WAY DOWN IN NEVERLAND";
    2. Regex regex = new Regex("NEVERLAND");

    Bây giờ, thì kết quả thế nào?
    Chợt, 1 đứa bạn tui nó bảo nó muốn tìm chữ "EVER" trong chuỗi s trên cơ, hix hix, ra là nó muốn bắt bí mình đây, được rồi, xem ta đây
    Visual C# Code:
    1.             string s = "WAY DOWN IN NEVERLAND";
    2.             Regex regex = new Regex("EVER");
    3.             if (regex.IsMatch(s))
    4.                 Console.WriteLine("Chuoi \"EVER\" ton tai trong: " + s);
    5.             else
    6.                 Console.WriteLine("Chuoi \"EVER\" khong ton tai trong: " + s);

    Cỡ nào cũng chơi Bảo đảm ra kết quả là: tồn tại

    <Đi ăn cơm đây, luyện xong viết tiếp>

  2. #2
    Ngày gia nhập
    03 2007
    Bài viết
    179

    Visual C# Code:
    1.             string tui = "I am buithuha";
    2.             string thi = tui.Replace("thi", "xxxx");
    3.             if (tui == thi)
    4.                 Console.Write("khong co chu THI trong {0}",tui);
    5.             if (tui != thi)
    6.                 Console.Write("co chu THI trong {0}",tui);
    7.            
    8.             Console.ReadLine();
    // cách trên mình thấy cũng được, mong các bạn góp ý

  3. #3
    Ngày gia nhập
    01 2007
    Bài viết
    412

    Mặc định Xác minh mã số phần mềm bằng Regular Expression

    Để mọi người hiểu sơ qua phần nào về công lực thâm hậu của RE, mình xin đưa ra 1 ví dụ: chẳng hạn, mình cho người ta nhập vào 1 số đăng ký phần mềm có dạng: xxxx-xxxx-xxx-xxxx (với x là những chữ số thập phân từ 1-9). Yêu cầu là làm sao để xác định chuỗi số đăng ký mà người dùng nhập vào là đúng chuẩn, các bạn tham khảo code sau nhé:
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Text;
    4. using System.Text.RegularExpressions;
    5.  
    6. namespace ConsoleApplication1
    7. {
    8.     class Program
    9.     {
    10.         static void Main(string[] args)
    11.         {
    12.             Console.Write("Nhap so SERIAL cho phan mem (xxxx-xxxx-xxxx-xxxx):");
    13.             string serial_key = Console.ReadLine();
    14. [B]            Regex regex = new Regex(@"^\d{4}-?\d{4}-?\d{4}-?\d{4}$");[/B]
    15.             if (regex.IsMatch(serial_key))
    16.                 Console.WriteLine("Hoan tat viec be khoa phan mem ^_^");
    17.             else
    18.                 Console.WriteLine("Vui long nhap lai so Serial");
    19.         }
    20.     }
    21. }
    Nếu bạn nhập dạng sau : 1234-5678-4321 thì đúng chuẩn
    Nếu nhập: abcd-5674-5987 thì sai chuẩn

  4. #4
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    @ : bắt đầu 1 chuỗi
    \d : kí tự là số
    \w : kí tự là chữ
    (n) : số lượng kí tự cho phép
    ... <còn nhiều, Danh rỗi thì viết cả bộ RegEx vào cho mọi người>

    ví dụ như là : lọc một chuỗi
    string filter = @"@\s@\s\.\s"; // cái này là lọc email : hình như gần đúng
    None!

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Hix, gì mà phải phức tạp vậy mấy bác, em chỉ có mấy dòng code mà đơn giản hơn nhiều

    Visual C# Code:
    1.     class Program
    2.     {
    3.         static void Main(string[] args)
    4.         {
    5.             // text string
    6.             String text = "iamasupernewbie.itsme";
    7.             // pattern string
    8.             String pattern = "newbie";
    9.  
    10.             // return index where matching occur (index >= 0); otherwise return -1
    11.             if (text.IndexOf(pattern) >= 0)
    12.                 Console.WriteLine("found!");
    13.             else
    14.                 Console.WriteLine("not found!");
    15.         }
    16.     }

    Hiện tại mình chỉ thấy tác dụng của Regex khi cần tìm một chuỗi nào đó có định dạng phức tạp thôi, ví dụ như số serial xxxx-xxxx-xxxx chẳng hạn.
    Đã được chỉnh sửa lần cuối bởi nhc1987 : 15-10-2007 lúc 09:31 AM.
    Keep moving forward!

    ... Retired ...

  6. #6
    Ngày gia nhập
    10 2007
    Bài viết
    5

    Mặc định Sử dụng Regular Expression trong lập trình C#

    Vậy bác nhc cho em biết cách tìm của bác có thể cho biết vị trí của chuỗi con cần tìm trong chuỗi cha không, em không rành regular exp nên chỉ biết tìm = cách đó
    Nguyễn Thị Mai Phượng

  7. #7
    Ngày gia nhập
    10 2007
    Bài viết
    32

    Muốn tìm chuỗi con trong chuỗi cha thì dùng thuật toán Brute-Force hoặc Knuth-Morris-Pratt. Mình chỉ nhớ tên thuật toán thôi chứ code thì không nhớ nổi. Có thể tìm trên google hoặc wikipedia

  8. #8
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Vậy bác nhc cho em biết cách tìm của bác có thể cho biết vị trí của chuỗi con cần tìm trong chuỗi cha không, em không rành regular exp nên chỉ biết tìm = cách đó
    Mình ko hiểu ý của bạn. Trong đoạn code của mình, nếu bạn đọc kĩ comment sẽ thấy rõ
    // return index where matching occur (index >= 0); otherwise return -1
    Phương thức IndexOf sẽ trả về vị trí đầu tiên có matching xảy ra, nếu không có matching thì trả về -1.

    Do đó, nếu bạn muốn biết vị trí matching thì
    Code:
    int matchingPosition = text.IndexOf(pattern)
    bạn sẽ lấy đc vị trí matching.

    Thân.
    Keep moving forward!

    ... Retired ...

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    bạn ấy chắc không biết Indexof là gì thôi, chắc nghĩ là phương thức find hay search, hoặc có thể là mới đọc vài bài đầu , chưa đọc bài của bạn, nhưng thực sự trước đây không biết gì, giờ thấy regular expression mạnh thật , càng mạnh khi một string trong .net kéo dài đến int32, có điều khó dùng quá.
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

  10. #10
    Ngày gia nhập
    10 2007
    Bài viết
    5

    Cám ơn bạn nhc dã trả lời, tuy nhiên ý mình là như vậy, xin lỗi vì hôm đó ko nói rõ ý:
    giả sử cho string "newbie is beginner newbie at a newbie's house", đưa ra chỉ mục của các từ newbie tìm được chứ không phải 1 từ như bạn đã làm.
    Nguyễn Thị Mai Phượng

Các đề tài tương tự

  1. Sử dụng Regular Expression trong C# và .NET
    Gửi bởi nhc1987 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 12
    Bài viết cuối: 26-04-2013, 08:43 AM
  2. Cách xác định path trong 1 url bằng regular expression
    Gửi bởi sieuthanh trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 1
    Bài viết cuối: 12-01-2012, 05:59 PM
  3. Biểu thức chính quy ( Regular expression) trong lập trình C
    Gửi bởi sieuthanh trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 16-12-2011, 07:29 PM
  4. Regular Expression trong C#
    Gửi bởi haipnit trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 12-08-2010, 02:03 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn