Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Regular Expressions, help me!

  1. #1
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Mặc định Regular Expressions, help me!

    Dr đang bị mắc một chút về cái này, với cái phần kiểm tra dữ kiệu có phải là số kiểu C/C++ không?

    Như các bạn biết là C/C++ Styles có mấy loại kiểu dữ liệu số như sau:

    decimal: 0-9, có số âm và số dương
    hexadecimal: 0-F, có một kiểu
    Octal: 0-7, có một kiểu
    Extend_decimal: x.xE+xxx hoặc x.xE-xxx , có số âm và số dương

    Dr muốn viết một cú pháp regular để kiểm tra xem số nhập vào có thực sự là kiểu C/C++ style không?

    Vậy thì phải làm thế nào để có thể làm được điều này? Rất mong các bạn chỉ giúp Dr! Xin cảm ơn!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  2. #2
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Bác admin thử đoạn code này coi (copy ra notepad, save lại với đuôi html):
    JavaScript Code:
    1. <html>
    2. <title>Find Numbers</title>
    3. <body>
    4. <script language="JavaScript">
    5. <!-- Hide code from old browsers
    6. /*
    7. ** Author: I love cxx
    8. ** Copyright (c) 2007
    9. ** Desc: VBB ext support
    10. ** Filename: jsregex.html
    11. ** Supported browsers: Firefox v2.0+; IE 6.x+
    12. */
    13. var octNumberRule = /\b(\+|-)?0[0-7]+(u|L|uL|LL|uLL)?\b/gi;
    14. var hexNumberRule = /\b(\+|-)?0x[A-F0-9]+(u|L|uL|LL|uLL)?\b/gi;
    15. var decNumberRule = /\b(\+|-)?(\d|[1-9]\d+)(u|L|uL|LL|uLL)?\b/gi;
    16. var fltNumberRule = /\b(\+|-)?\d*\.\d+([eE][-+]?(\d+\.\d+|\d+))?\b/gi;
    17.  
    18. var UnknownNumberExp = -1;
    19. var DecExp = 0;
    20. var OctExp = 1;
    21. var HexExp = 2;
    22. var FltExp = 3;
    23.  
    24. function isOctal (expression) {
    25.     return octNumberRule.test (expression);
    26. }
    27.  
    28. function isHexadecimal (expression) {
    29.     return hexNumberRule.test (expression);
    30. }
    31.  
    32. function isDecimal (expression) {
    33.     return decNumberRule.test (expression);
    34. }
    35.  
    36. function isFloat (expression) {
    37.     return fltNumberRule.test (expression);
    38. }
    39.  
    40. function whatNumberExpType (expression) {
    41.     if (isFloat (expression))
    42.         return FltExp;
    43.    
    44.     if (isOctal (expression))
    45.         return OctExp;
    46.    
    47.     if (isDecimal (expression))
    48.         return DecExp;
    49.    
    50.     if (isHexadecimal (expression))
    51.         return HexExp;
    52.        
    53.     return UnknownNumberExp;
    54. }
    55.  
    56. function isNumber (expression) {
    57.     return (whatNumberExpType (expression) != UnknownNumberExp);
    58. }
    59.  
    60. function findAndDisplayNumbersOnly () {
    61.     var enteredText = document.frmMain.txtNumber.value;
    62.     var hightlightRules = /\b(\+|-)?((\d*\.\d+([eE][-+]?(\d+\.\d+|\d+))?)|(((0[0-7]+)|(\d|[1-9]\d+)|(0x[0-9A-F]+))(u|L|uL|LL|uLL)?))\b/gi;
    63.     var results = enteredText.match(hightlightRules);
    64.    
    65.     if (results) {
    66.         var text = "";
    67.         for (var i = 0; i < results.length; ++i)
    68.             text += results[i] + "\n";
    69.         document.frmMain.txtResult.value = text;
    70.     } else {
    71.         document.frmMain.txtResult.value = "NOT FOUND";
    72.     }
    73. }
    74.  
    75. function hightlightCode () {
    76.     var enteredText = document.frmMain.txtNumber.value;
    77.     var hightlightRules = /\b(\+|-)?((\d*\.\d+([eE][-+]?(\d+\.\d+|\d+))?)|(((0[0-7]+)|(\d|[1-9]\d+)|(0x[0-9A-F]+))(u|L|uL|LL|uLL)?))\b/gi;
    78.     var hightlightText = enteredText.replace (hightlightRules, "[COLOR=\"Dreaminess\"]$&[/COLOR]");
    79.     document.frmMain.txtCode.value = hightlightText;
    80. }
    81.  
    82. -->
    83. </script>
    84. </body>
    85. <form name="frmMain">
    86.     <p>Sample code:</p>
    87.     <textarea cols=50 rows=10 name="txtNumber"></textarea><br>
    88.     <input type="button" name="cmdCheck" onclick="findAndDisplayNumbersOnly ()" value="Find Now!"></input>
    89.     <input type="button" name="cmdHighlight" onclick="hightlightCode ()" value="Highlight Me!"></input>
    90.     <p>Result:</p>
    91.     <textarea cols="50" rows="10" name="txtResult"></textarea>
    92.     <textarea cols="50" rows="10" name="txtCode"></textarea>
    93. </form>
    94. </html>
    Đã được chỉnh sửa lần cuối bởi ilovecplusplus : 15-03-2008 lúc 01:41 AM.
    Our dreams are young and we both know they take us where we want to go...

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Thử không thấy hiệu quả gì luôn, nhấn Highlight Me! mà nó cứ lỳ ra không thấy highlight. Đang nhác muốn thử luôn, lại bắt edit lại. Chán

    Vừa xem cái expression của bác, cũng dễ hiểu là nếu người dùng nhập đúng thì nó không vấn đề gì, nhưng nếu nhập sai ví dụ như: 0x45DF5.698 nó vẫn trùng và sẽ hightlight cái phần 0x45DF5 ngay, thế thì không ổn lắm. Nhưng mà cái đoạn expression này có một điểm mà có thể học theo. Xin cảm ơn nhé!

    Mà số hexadecimal và octal mà cũng có số âm và số dương hả bác?
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  4. #4
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Khổ quá, cái editor của VBB nó remove hết cả "\" nếu để trong tag PHP. Em fix lại rồi đấy, bác admin thử lại xem.

    Vấn đề bác bảo về 0x45DF5.698, em công nhận đúng. Chính xác là nó hilight cả 0x45DF5 lẫn thằng .0698, có lẽ phải fix lại.

    Còn vụ số âm & dương bác cứ thử với compiler trực tiếp là biết ngay ấy mà.
    Our dreams are young and we both know they take us where we want to go...

  5. #5
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Ah thử được rồi, mà bác dùng cái tag php đó làm gì, highlight nhiều màu quá đọc cũng rối rắm lắm.

    Dr mới nghiên cứu cái này, cho Dr hỏi chút là cái u|L|uL|LL|uLL có nghĩa gì vậy? Và cái /gi nó có tác dụng gì nhỉ?

    Dr muốn làm cái expression thông minh hơn như sau nè:
    Giả dụ mình nhập vào là ++123 thì nó chỉ highlight có 123 thôi, nhưng nếu là +123 thì nó sẽ hightlight tất.

    Với các số octal và hexadecimal thì nếu có +/- ở đầu, hoặc có dấu chấm động, => không đúng dạng, không hightlight.

    Đang boăn khoăn mấy cái chỗ đó.

    Dr cũng viết một expression nhúng vào cái tag code nâng cao đây, có điều là nó vẫn không được như ý muốn. Nếu nhập đúng thì không sao, nhưng sai thì ... Xem ví dụ sau sẽ hiểu luôn.
    C Code:
    1. -2000
    2. 09
    3. +98756
    4. ++1256
    5. --8975
    6. 89456
    7. + 545__
    8. 45--
    9. 5002(
    10. 45456((
    11. 45.9638
    12. .2356
    13. 12.36
    14. b123456
    15.  
    16. 1.5E+415
    17. -12.56E+
    18. .235E+258.26
    19. .23e+96
    20.  
    21. 0x178
    22. 0x45CD
    23. 0xA98
    24. 0X78956CD5
    25. 0X78A9
    26. 0X789A
    27. x1524
    28. 00x1255
    29. 0xx456879
    30. -0x456879
    31. 0xx78945623
    32. 0x78945.456
    33. 0x4562
    34. 0x789A5.456
    35. 0x78945.A56
    36. 0x45CD5
    37. +0x45CD5
    38. 0x45CD
    39. --0x4526
    40. --78CD
    41. ++0x78956
    42. --0x456CD
    43. 800x
    44. 8x000
    45. 80x89373 + 5678
    46. 000x78800
    47. 8080x4859
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  6. #6
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Mặc định Regular Expressions, help me!

    Mấy cái u, uL... gì đó đơn giản thôi mà bác. Mấy cái này là suffix cho exp kiểu số nguyên (u -> unsigned, uL -> unsigned long, LL: long long (số nguyên 64bit)... (Vd: 0xffffffffLL) , chưa kể cái suffix "f" của số thực em quên chưa add vào (Vd: 0.123f)

    Cái flag g (trong /gi) có nghĩa là "match all", cụ thể nếu đoạn text là "20, 30, 40" mà không có g thì nó chỉ highlight đc thằng đầu tiên (20) rồi stop.

    Flag i là "case-insensitive" (không phân biệt chữ hoa /thường)

    Code:
    Với các số octal và hexadecimal thì nếu có +/- ở đầu...
    octal/hex có +/- ở đầu là valid bác ah. Chỉ là các cách khác nhau để biểu diễn một số nguyên (try: cout << -0x0000 << endl.
    Our dreams are young and we both know they take us where we want to go...

  7. #7
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Ờ, thì cũng đoán là cái u, uL là như vậy. Nhưng mà chưa chắc chắn nên hỏi.

    Bữa trước nghĩ nhầm, Dr hiểu rồi, cảm ơn cậu nhiều nhé. Cậu cũng rành javascript nhỉ? Cậu có thể giúp tớ viết cái hàm copy text của môọ tag nào đó theo id không? Có thể sử dụng trên FF? Cảm ơn trước nhé!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  8. #8
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Hôm nay vừa bị sốt, thành ra lại có thời gian mò mẫn, biểu thức lằng nhằng, dễ nhầm quá. Xem lại bài viết này thấy bác ilovecplusplus nhầm thì phải:

    JavaScript Code:
    1. Dòng này: var fltNumberRule = /\b(\+|-)?\d*\.\d+([eE][-+]?(\d+\.\d+|\d+))?\b/gi;
    2. Thay bằng: var fltNumberRule = /\b(\+|-)?\d*\.\d+([e][-+]?(\d+))?\b/gi;

    --------------------
    Vừa làm lại cái regular expression cho cái tag code nâng cao, nhưng vẫn còn một vài chỗ chưa được. Rất mong các bác chỉ giúp Dr với!

    C++ Code:
    1. 1.5E+688.188 // Sau E+ nó là số nguyên dương chứ?
    2. 0x789A5.456 // Chỗ này nữa
    3. 0x78945.A56
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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

  1. Ai đó làm một bài về Regular Expressions trong C đi?
    Gửi bởi muramasa trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-06-2011, 09:18 PM
  2. cách dùng regular expressions trong c# như thế nào?
    Gửi bởi baong0c trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 30-09-2010, 11:10 PM
  3. Thắc mắc về Regular Expressions C#
    Gửi bởi gianghoplus trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 26-07-2010, 09:17 AM
  4. Cho Mình Xin Tài Liệu Về regular expressions
    Gửi bởi thansautk trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 05-12-2008, 10:11 AM
  5. Regular expressions, giúp mình một chút về Regular expressions
    Gửi bởi coixuong trong diễn đàn Thắc mắc chung
    Trả lời: 1
    Bài viết cuối: 26-11-2007, 03:39 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