1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Hội thảo: Tương quan các mẫu với biểu hiện thường xuyên] 2 00:00:02,000 --> 00:00:04,000 [Đại học John Mussman-Harvard] 3 00:00:04,000 --> 00:00:07,220 [Đây là CS50.-CS50.TV] 4 00:00:07,780 --> 00:00:11,610 Được rồi. Vâng, chào đón tất cả mọi người. Đây là CS50 2012. 5 00:00:11,780 --> 00:00:16,610 Tên tôi là John, và tôi sẽ nói hôm nay về biểu thức thông thường. 6 00:00:16,610 --> 00:00:22,530 Biểu thức thông thường chủ yếu là một công cụ, nhưng cũng đôi khi sử dụng 7 00:00:22,530 --> 00:00:28,650 trong mã tích cực về cơ bản phù hợp với mô hình và dây. 8 00:00:28,650 --> 00:00:33,800 Vì vậy, đây là một truyện tranh web từ VNAV. 9 00:00:34,440 --> 00:00:42,370 Trong truyện tranh này có một bí ẩn giết người mà kẻ giết người có 10 00:00:42,370 --> 00:00:47,860 theo sau ai đó đi nghỉ, và các nhân vật chính phải 11 00:00:47,860 --> 00:00:52,500 tìm kiếm thông qua 200 MB của các email tìm kiếm một địa chỉ. 12 00:00:52,500 --> 00:00:56,090 Và chúng được về để cho lên khi một người biết biểu thức thông thường - 13 00:00:56,090 --> 00:01:00,550 có lẽ là một siêu anh hùng - leo thang xuống và viết một số mã 14 00:01:00,550 --> 00:01:02,970 và giải quyết những bí ẩn giết người. 15 00:01:02,970 --> 00:01:07,370 Vì vậy, có lẽ đó sẽ là một cái gì đó mà bạn sẽ được trao quyền để làm 16 00:01:07,370 --> 00:01:09,370 sau buổi hội thảo này. 17 00:01:09,370 --> 00:01:12,250 Chúng tôi chỉ cần đi để cung cấp một giới thiệu ngắn gọn về ngôn ngữ 18 00:01:12,250 --> 00:01:16,770 và cung cấp cho bạn đủ đủ tiền để đi sau khi nhiều nguồn lực hơn mình. 19 00:01:17,680 --> 00:01:21,700 >> Biểu thức để thường xuyên nhìn về cơ bản như thế này. 20 00:01:22,930 --> 00:01:25,550 Đây là một biểu hiện thường xuyên trong Ruby. 21 00:01:25,550 --> 00:01:29,280 Nó không phải là terribly khác nhau qua ngôn ngữ. 22 00:01:29,690 --> 00:01:37,630 Chúng tôi chỉ có trên dấu gạch chéo để bắt đầu và đánh dấu các biểu hiện thường xuyên trong Ruby. 23 00:01:37,630 --> 00:01:42,880 Và đây là một biểu hiện thường xuyên để tìm trong mô hình địa chỉ email. 24 00:01:42,880 --> 00:01:49,160 Vì vậy, chúng ta thấy ở các bit đầu tiên sẽ cho bất kỳ ký tự chữ và số. 25 00:01:50,500 --> 00:01:54,880 Đó là bởi vì địa chỉ email thường xuyên phải bắt đầu với một chữ cái. 26 00:01:55,460 --> 00:01:59,330 Và sau đó bất kỳ ký tự đặc biệt tiếp theo là biểu tượng @. 27 00:01:59,330 --> 00:02:03,260 Và sau đó điều tương tự cho tên miền. 28 00:02:03,260 --> 00:02:10,030 Và sau đó từ 2 đến 4 ký tự để tìm kiếm các com.,. Net, và như vậy. 29 00:02:10,850 --> 00:02:13,200 Vì vậy, đó là một ví dụ của biểu thức chính quy. 30 00:02:13,200 --> 00:02:17,270 Vì vậy, thường xuyên biểu thức là giao thức cho việc tìm kiếm patters trong văn bản. 31 00:02:17,270 --> 00:02:21,130 Họ làm so sánh, lựa chọn, và thay thế. 32 00:02:21,690 --> 00:02:27,970 Vì vậy, một ví dụ thứ ba là tìm kiếm tất cả các số điện thoại kết thúc 54 trong một thư mục. 33 00:02:27,970 --> 00:02:34,360 Vì vậy, trước khi David trích lập thư mục CS50 chúng ta có thể tìm kiếm 34 00:02:34,360 --> 00:02:40,450 một mô hình mà chúng tôi có dấu ngoặc đơn sau đó 3 số sau đó kết thúc ngoặc, 35 00:02:40,450 --> 00:02:44,070 3 số lượng nhiều hơn, một dấu gạch ngang, 2 con số, và sau đó 54. 36 00:02:44,070 --> 00:02:48,310 Và đó sẽ là cơ bản cách chúng ta đưa ra một biểu hiện thường xuyên để tìm kiếm đó. 37 00:02:49,150 --> 00:02:52,960 >> Vì vậy, có - chúng tôi đã thực hiện một số điều trong CS50 có một chút như 38 00:02:52,960 --> 00:02:59,740 biểu thức thông thường, vì vậy - ví dụ - trong tập tin dictionary.C 39 00:02:59,740 --> 00:03:04,720 cho phép đặt vấn đề kiểm tra bạn có thể đã sử dụng fscanf 40 00:03:04,720 --> 00:03:07,930 đọc trong một từ trong từ điển. 41 00:03:07,930 --> 00:03:16,240 Và bạn sẽ nhìn thấy 45s tỷ lệ phần trăm là tìm kiếm một chuỗi 45 ký tự. 42 00:03:16,240 --> 00:03:20,020 Vì vậy, nó có phần giống như một biểu hiện thường xuyên thô sơ. 43 00:03:21,150 --> 00:03:26,060 Và bạn có thể có 45 nhân vật phù hợp với các hóa đơn có 44 00:03:26,060 --> 00:03:28,080 và chọn những người lên. 45 00:03:28,080 --> 00:03:33,480 Và sau đó là ví dụ thứ hai trong vấn đề lập trình web mới nhất 46 00:03:33,480 --> 00:03:40,760 đặt trong mã phân phối dành cho php chúng ta thực sự không có một biểu hiện thường xuyên đơn giản. 47 00:03:40,760 --> 00:03:46,790 Và điều này được chỉ đơn giản là tìm kiếm để kiểm tra xem trang web đó là thông qua trong 48 00:03:46,790 --> 00:03:51,940 phù hợp hoặc đăng nhập hoặc đăng xuất đăng ký. PHP. 49 00:03:52,220 --> 00:03:57,910 Và sau đó trở về đúng hay sai dựa trên đó phù hợp với biểu hiện thường xuyên. 50 00:03:59,400 --> 00:04:01,740 >> Vì vậy, khi bạn sử dụng biểu thức chính quy? 51 00:04:01,740 --> 00:04:04,820 Tại sao anh lại ở đây ngày hôm nay? 52 00:04:05,330 --> 00:04:08,480 Vì vậy, bạn không muốn sử dụng biểu thức thông thường khi có cái gì đó 53 00:04:08,480 --> 00:04:11,640 hiện công việc cho bạn thậm chí dễ dàng hơn. 54 00:04:11,640 --> 00:04:15,510 Vì vậy, XML và HTML thực sự khá khó khăn 55 00:04:15,510 --> 00:04:18,480 viết biểu thức thông thường như chúng ta sẽ thấy trong một chút. 56 00:04:19,110 --> 00:04:23,280 Vì vậy, có phân tích cú pháp dành riêng cho những ngôn ngữ. 57 00:04:24,170 --> 00:04:30,060 Bạn cũng cần phải đồng ý với những đánh đổi thương mại và chính xác thường xuyên. 58 00:04:30,060 --> 00:04:36,220 Nếu bạn đang cố gắng - vì vậy chúng ta đã thấy một biểu hiện thường xuyên cho một địa chỉ email, 59 00:04:37,370 --> 00:04:42,590 nhưng nói rằng bạn muốn có một địa chỉ email cụ thể và dần dần 60 00:04:42,590 --> 00:04:48,570 biểu hiện thường xuyên có thể trở nên phức tạp hơn vì nó đã trở thành chính xác hơn. 61 00:04:49,580 --> 00:04:52,260 Vì vậy, đó sẽ là một thương mại giảm. 62 00:04:52,260 --> 00:04:55,330 Bạn phải chắc chắn rằng bạn đang ổn định với các biểu hiện thường xuyên. 63 00:04:55,330 --> 00:04:57,920 Nếu bạn biết chính xác những gì bạn đang tìm kiếm nó có thể có ý nghĩa hơn 64 00:04:57,920 --> 00:05:02,070 để đưa vào thời gian và viết phân tích cú pháp hiệu quả hơn. 65 00:05:02,070 --> 00:05:06,980 Và cuối cùng có một vấn đề lịch sử với sự đều đặn 66 00:05:06,980 --> 00:05:08,940 các biểu thức và ngôn ngữ. 67 00:05:08,940 --> 00:05:12,960 Biểu thức thông thường là thực sự mạnh hơn 68 00:05:12,960 --> 00:05:16,450 biểu thức thông thường mỗi nói trong một ý nghĩa chính thức. 69 00:05:17,130 --> 00:05:20,150 >> Vì vậy, tôi không muốn đi quá xa vào các lý thuyết chính thức, 70 00:05:20,150 --> 00:05:24,000 nhưng hầu hết các ngôn ngữ mà chúng ta đang trong thực sự là không thường xuyên. 71 00:05:24,000 --> 00:05:29,110 Và đây là lý do tại sao biểu thức thông thường đôi khi không được coi là tất cả những gì an toàn. 72 00:05:29,670 --> 00:05:33,150 Vì vậy, về cơ bản có một hệ thống phân cấp Chomsky cho các ngôn ngữ, 73 00:05:33,150 --> 00:05:38,400 và biểu thức thông thường được xây dựng bằng cách sử dụng công đoàn, nối, 74 00:05:38,400 --> 00:05:41,810 và các hoạt động sao Kleene rằng chúng ta sẽ thấy trong một vài phút. 75 00:05:43,130 --> 00:05:48,860 Nếu bạn quan tâm về mặt lý thuyết có khá nhiều xảy ra ở đó dưới mui xe. 76 00:05:50,360 --> 00:05:55,880 >> Vì vậy, một lịch sử ngắn gọn - chỉ với bối cảnh ở đây - bộ thường xuyên đã đưa ra 77 00:05:55,880 --> 00:05:59,580 trong những năm 1950, và sau đó chúng tôi đã biên tập đơn giản mà 78 00:05:59,580 --> 00:06:03,300 kết hợp biểu thức thông thường - chỉ tìm kiếm chuỗi. 79 00:06:03,570 --> 00:06:09,110 Grep - đó là một công cụ dòng lệnh - là một trong những người đầu tiên 80 00:06:09,110 --> 00:06:14,160 công cụ rất phổ biến mà kết hợp biểu thức thông thường trong những năm 1960. 81 00:06:14,160 --> 00:06:20,560 Trong thập niên 80, Perl được xây dựng - là một ngôn ngữ lập trình 82 00:06:20,560 --> 00:06:24,110 kết hợp biểu thức thông thường rất nổi bật. 83 00:06:24,550 --> 00:06:30,130 Và sau đó gần đây chúng tôi đã có Perl biểu thức chính quy tương thích 84 00:06:30,130 --> 00:06:35,870 giao thức cơ bản trong các ngôn ngữ khác mà sử dụng nhiều cú pháp tương tự. 85 00:06:36,630 --> 00:06:39,840 Tất nhiên sự kiện quan trọng nhất là vào năm 2008 86 00:06:39,840 --> 00:06:43,040 nơi có các biểu hiện thường xuyên quốc gia ngày đầu tiên, 87 00:06:43,040 --> 00:06:47,350 mà tôi tin là ngày 01 tháng 6 nếu bạn muốn ăn mừng đó. 88 00:06:48,430 --> 00:06:50,840 >> Một lần nữa, nhiều hơn chỉ là một chút lý thuyết ở đây. 89 00:06:52,180 --> 00:06:55,320 Vì vậy, có một vài cách khác nhau để xây dựng biểu thức thông thường. 90 00:06:55,950 --> 00:07:02,050 Một cách đơn giản là xây dựng các biểu hiện mà bạn sẽ 91 00:07:02,050 --> 00:07:07,500 chạy trên chuỗi giải thích - về cơ bản xây dựng một mini-chương trình nhỏ mà 92 00:07:07,500 --> 00:07:11,870 sẽ phân tích từng phần của chuỗi xem, "Ồ, điều này phù hợp với những biểu hiện thường xuyên hay không?" 93 00:07:12,250 --> 00:07:14,250 Và sau đó chạy đó. 94 00:07:14,250 --> 00:07:17,300 Vì vậy, nếu bạn có một biểu hiện rất nhỏ thường xuyên, điều này có lẽ 95 00:07:17,300 --> 00:07:19,380 cách hiệu quả nhất để làm điều đó. 96 00:07:20,090 --> 00:07:25,420 Và sau đó nếu bạn - một lựa chọn khác là để giữ cho xây dựng lại 97 00:07:25,420 --> 00:07:30,260 biểu hiện như bạn đi, và đó là khả năng mô phỏng. 98 00:07:30,440 --> 00:07:37,690 Và những nỗ lực ban đầu tại các thuật toán biểu thức chính quy là 99 00:07:37,690 --> 00:07:44,330 tương đối đơn giản và tương đối nhanh, nhưng không có nhiều tính linh hoạt. 100 00:07:44,330 --> 00:07:47,500 Vì vậy, để làm thậm chí một số trong những điều mà chúng ta sẽ xem xét 101 00:07:47,500 --> 00:07:52,860 hôm nay chúng tôi đã phải làm thường xuyên biểu hiện phức tạp hơn 102 00:07:52,860 --> 00:07:56,650 triển khai có nguy cơ bị chậm hơn nhiều, vì thế đó là một cái gì đó để nhớ 103 00:07:57,510 --> 00:08:02,920 Có còn là một biểu thức từ chối thường xuyên của nhiều cuộc tấn công 104 00:08:02,920 --> 00:08:08,330 khai thác tiềm năng cho việc thực hiện mới hơn của 105 00:08:08,330 --> 00:08:10,930 biểu thức thông thường để trở nên rất phức tạp. 106 00:08:11,570 --> 00:08:15,650 Và trong nhiều ý nghĩa mà chúng ta đã thấy trong các cuộc tấn công tràn bộ đệm, 107 00:08:15,650 --> 00:08:21,610 bạn có xâm nhập có thể bằng cách làm cho các vòng lặp đệ quy 108 00:08:21,610 --> 00:08:24,400 tàn phá năng lực của bộ nhớ. 109 00:08:24,780 --> 00:08:29,540 Và bằng cách này Regexen là một trong những số nhiều chính thức của biểu thức chính quy 110 00:08:29,540 --> 00:08:32,890 bằng cách tương tự để bò trong Anglo-Saxon. 111 00:08:33,500 --> 00:08:40,169 >> Được rồi, do Thư viện Python nhiều bạn ở đây trong người có máy tính Mac, 112 00:08:40,169 --> 00:08:43,860 do đó, bạn thực sự có thể kéo này lên trên màn hình của bạn. 113 00:08:43,860 --> 00:08:47,480 Biểu thức thông thường được xây dựng vào Python. 114 00:08:48,070 --> 00:08:53,020 Và như vậy Python được cài đặt sẵn trên máy tính Mac và cũng có sẵn trực tuyến tại liên kết này. 115 00:08:53,770 --> 00:08:57,350 Vì vậy, nếu bạn đang xem, bạn có thể tạm dừng và chắc chắn rằng bạn có Python 116 00:08:58,080 --> 00:09:00,170 như chúng tôi chơi xung quanh đây. 117 00:09:00,780 --> 00:09:06,420 Có một trực tuyến sử dụng, vì vậy nếu bạn chỉ cần gõ Python vào máy tính của bạn 118 00:09:06,420 --> 00:09:10,500 bạn sẽ thấy rằng phiên bản đi lên trong các thiết bị đầu cuối. 119 00:09:11,070 --> 00:09:17,720 Vì vậy, tôi cung cấp một liên kết để hướng dẫn cho phiên bản 2 của Python cũng như một cheat sheet. 120 00:09:17,720 --> 00:09:23,100 Có một phiên bản 3 của Python, nhưng Mac của bạn không nhất thiết phải 121 00:09:23,100 --> 00:09:25,130 đi kèm với đó cài đặt sẵn. 122 00:09:25,130 --> 00:09:27,360 Vì vậy, không quá khác nhau. 123 00:09:27,360 --> 00:09:33,270 Được rồi, do một số vấn đề cơ bản của việc sử dụng biểu thức thông thường trong Python. 124 00:09:34,080 --> 00:09:42,650 >> Vì vậy, ở đây tôi sử dụng một biểu hiện rất đơn giản, vì vậy tôi đã Python tái nhập khẩu 125 00:09:43,750 --> 00:09:47,070 và sau đó lấy kết quả của re.search. 126 00:09:47,070 --> 00:09:49,910 Và việc tìm kiếm có 2 đối số. 127 00:09:49,910 --> 00:09:56,040 Đầu tiên là biểu hiện thường xuyên, và thứ hai là văn bản 128 00:09:56,040 --> 00:09:58,290 hoặc chuỗi bạn muốn phân tích. 129 00:09:58,290 --> 00:10:01,210 Và sau đó tôi in ra result.group. 130 00:10:01,580 --> 00:10:05,860 Vì vậy, đây là 2 chức năng cơ bản, chúng ta sẽ thấy ngày nay 131 00:10:06,790 --> 00:10:10,170 trong học tập về biểu thức thông thường. 132 00:10:10,170 --> 00:10:12,880 Vì vậy chỉ cần phá vỡ biểu hiện thường xuyên ở đây 133 00:10:12,880 --> 00:10:21,770 h và sau đó \ w và sau đó m do đó, \ w chỉ chấp nhận bất kỳ chữ cái trong đó. 134 00:10:21,850 --> 00:10:26,820 Vì vậy, ở đây chúng tôi đang tìm kiếm một "h" và sau đó một chữ cái 135 00:10:26,820 --> 00:10:30,060 và sau đó m, vì vậy đây có thể sẽ phù hợp với giăm bông 136 00:10:30,060 --> 00:10:34,480 trong, "Abraham Lincoln và ham bánh mì." 137 00:10:35,040 --> 00:10:37,150 Đây là kết quả của nhóm đó. 138 00:10:37,680 --> 00:10:43,130 Một điều mà chúng ta có thể làm là sử dụng dây của chúng tôi trước khi văn bản trong Python. 139 00:10:43,130 --> 00:10:46,220 Vì vậy, tôi đoán tôi sẽ đi trước và kéo mà lên đây. 140 00:10:46,220 --> 00:10:49,210 Python tái nhập khẩu. 141 00:10:50,070 --> 00:10:54,000 Và nếu tôi đã làm điều tương tự - cho chúng tôi nói rằng văn bản là, 142 00:10:55,390 --> 00:11:00,800 "Abraham," chúng ta hãy phóng to - có chúng tôi đi. 143 00:11:01,610 --> 00:11:06,430 Văn bản là, "Abraham ăn giăm bông." 144 00:11:07,460 --> 00:11:15,260 Được rồi, và sau đó kết quả = re.search. 145 00:11:16,260 --> 00:11:22,020 Và sau đó biểu hiện của chúng tôi có thể h, và sau đó tôi sẽ làm chấm m. 146 00:11:22,020 --> 00:11:26,280 Vì vậy, dấu chấm chỉ mất bất kỳ nhân vật đó không phải là một dòng sản phẩm mới bao gồm cả số, 147 00:11:26,280 --> 00:11:28,650 dấu hiệu tỷ lệ phần trăm, bất cứ điều gì như thế. 148 00:11:28,650 --> 00:11:38,030 Và sau đó văn bản - sự bùng nổ - và sau đó result.group--yeah. 149 00:11:38,030 --> 00:11:41,820 Vì vậy, đó chỉ là cách để thực hiện các chức năng cơ bản ở đây. 150 00:11:42,300 --> 00:11:55,110 Nếu chúng ta có một chiếc nhẫn văn bản đó - rằng văn bản điên - có nói rất nhiều chém lại 151 00:11:55,110 --> 00:12:01,180 và dây bên trong và những thứ có thể trông giống như trình tự thoát ra, 152 00:12:01,180 --> 00:12:08,480 sau đó chúng tôi có thể muốn sử dụng các đầu vào văn bản thô để đảm bảo rằng được chấp nhận. 153 00:12:08,480 --> 00:12:14,120 Và rằng chỉ cần nhìn như thế. 154 00:12:14,120 --> 00:12:17,810 Vì vậy, nếu chúng ta đang tìm kiếm cho mỗi người trong số họ trong đó chúng ta không nên tìm thấy bất cứ điều gì. 155 00:12:19,070 --> 00:12:21,680 Nhưng đó là cách bạn sẽ thực hiện nó, chỉ cần trước khi chuỗi 156 00:12:21,680 --> 00:12:24,990 các biểu hiện thường xuyên bạn đặt chữ r. 157 00:12:26,150 --> 00:12:30,260 >> Được rồi, vì vậy hãy để chúng tôi tiếp tục đi. 158 00:12:30,260 --> 00:12:33,730 Được rồi - vì vậy chúng ta hãy xem một vài mẫu lặp đi lặp lại ở đây. 159 00:12:34,750 --> 00:12:39,150 Vì vậy, một điều mà bạn muốn làm là lặp lại điều 160 00:12:40,040 --> 00:12:42,480 như bạn đang tìm kiếm thông qua văn bản. 161 00:12:42,480 --> 00:12:48,300 Vì vậy, để làm một theo sau bởi bất kỳ số b - bạn làm ab *. 162 00:12:48,630 --> 00:12:51,620 Và sau đó có một loạt các quy tắc khác nữa. 163 00:12:51,620 --> 00:12:54,380 Và bạn có thể xem tất cả các lên, tôi sẽ chỉ cần chạy qua một số các 164 00:12:54,380 --> 00:12:57,630 thường được sử dụng những người thân. 165 00:12:57,630 --> 00:13:03,920 Vì vậy, ab + là một tiếp theo bất kỳ N lớn hơn 0 b. 166 00:13:04,510 --> 00:13:08,000 ab? là một tiếp theo 0 hoặc 1 b. 167 00:13:09,190 --> 00:13:18,580 ab {N} là một tiếp theo N b, và sau đó như vậy. 168 00:13:18,580 --> 00:13:22,820 Nếu bạn có 2 con số trong dấu ngoặc nhọn bạn đang xác định một phạm vi 169 00:13:23,300 --> 00:13:25,440 mà có thể có thể xuất hiện. 170 00:13:26,390 --> 00:13:30,420 Vì vậy, chúng tôi sẽ xem xét thêm vào một vài mô hình lặp đi lặp lại trong một phút. 171 00:13:31,960 --> 00:13:42,300 Vì vậy, 2 điều cần lưu ý khi sử dụng các mô hình phù hợp với các công cụ ở đây. 172 00:13:42,300 --> 00:13:52,120 Vì vậy, chúng ta muốn nhìn vào hm của, "Abraham Lincoln làm cho bánh sandwich giăm bông." 173 00:13:52,120 --> 00:13:55,230 Vì vậy, tôi đã thay đổi tên Abraham Lincoln với Abraham. 174 00:13:55,230 --> 00:14:00,290 Và bây giờ chúng tôi đang tìm kiếm những gì được trả về bởi chức năng tìm kiếm này, 175 00:14:00,290 --> 00:14:03,270 và nó chỉ trả về ham trong trường hợp này. 176 00:14:03,620 --> 00:14:08,080 Và nó làm thế bởi vì chỉ tìm kiếm tự nhiên có hầu hết các hàng đợi bên trái. 177 00:14:08,080 --> 00:14:12,130 Và tất cả các biểu thức thông thường, trừ khi bạn chỉ định khác sẽ làm điều đó. 178 00:14:12,830 --> 00:14:18,880 Nếu chúng ta muốn tìm tất cả có một chức năng cho điều đó - tìm thấy tất cả. 179 00:14:18,880 --> 00:14:35,100 Vì vậy, mà chỉ có thể trông giống như tất cả = re.findall ('h.m, văn bản) 180 00:14:35,100 --> 00:14:44,540 và sau đó all.group (). 181 00:14:44,540 --> 00:14:51,040 Tất cả các sản xuất cả ham và ham, trong trường hợp này cả hai dây trong Abraham mỗi ham. 182 00:14:51,610 --> 00:14:55,110 Vì vậy, đó là một lựa chọn khác. 183 00:14:56,250 --> 00:15:06,940 >> Tuyệt vời. Một điều khác cần lưu ý là biểu thức thông thường mất lớn nhất trực giác. 184 00:15:06,940 --> 00:15:09,520 Chúng ta hãy nhìn vào ví dụ này. 185 00:15:10,200 --> 00:15:16,070 Chúng tôi đã làm điều đó nhất tìm kiếm bên trái ở đây, và sau đó tôi đã cố gắng tìm kiếm lớn hơn 186 00:15:16,070 --> 00:15:18,800 sử dụng các nhà điều hành sao Kleene. 187 00:15:18,800 --> 00:15:24,180 Vì vậy, cho, "Abraham Lincoln làm cho bánh sandwich giăm bông," và tôi chỉ có trở lại 188 00:15:24,180 --> 00:15:26,280 m như một kết quả. 189 00:15:26,280 --> 00:15:31,670 Lý do cho sự sai lầm mà là tôi có thể đã thực hiện bất kỳ số lượng 190 00:15:31,670 --> 00:15:36,140 h là bởi vì tôi đã không chỉ định bất cứ điều gì để đi ở giữa h và m. 191 00:15:36,140 --> 00:15:42,010 Ví dụ chỉ có mà đã có m - các ví dụ chỉ có với m trong nó 192 00:15:42,010 --> 00:15:46,220 và bất kỳ số lượng của h chỉ là những chuỗi m. 193 00:15:46,490 --> 00:15:51,850 Sau đó, tôi đã thử nó một lần nữa, tôi nói: "Được rồi, chúng ta có được những nhóm lớn nhất thực tế ở đây." 194 00:15:51,850 --> 00:15:59,670 Và sau đó tôi đã làm h. * M, vì vậy mà chỉ cần trả bất kỳ số lượng ký tự giữa h và m. 195 00:16:00,280 --> 00:16:02,950 Và nếu bạn chỉ là bắt đầu và nghĩ, "Ồ, được rồi, và điều này sẽ 196 00:16:02,950 --> 00:16:11,560 làm cho tôi ham, "nó thực sự mất tất cả mọi thứ từ các h trong Abraham Lincoln 197 00:16:11,560 --> 00:16:13,690 tất cả các con đường lên đến hết ham. 198 00:16:14,040 --> 00:16:18,110 Đó là tham lam, nó thấy h - tất cả các văn bản khác này - m, 199 00:16:18,110 --> 00:16:21,280 và đó là những gì nó cần in 200 00:16:22,060 --> 00:16:27,480 Đây là một đặc biệt nghiêm trọng - đây là một tính năng chúng tôi cũng có thể 201 00:16:27,480 --> 00:16:30,670 chỉ định cho nó không được tham lam sử dụng các chức năng khác. 202 00:16:31,480 --> 00:16:34,490 Nhưng đây là một cái gì đó chúng ta phải lưu ý đặc biệt 203 00:16:34,490 --> 00:16:38,720 khi nhìn vào văn bản HTML, đó là lý do mà 204 00:16:38,720 --> 00:16:41,500 biểu thức thông thường là khó khăn cho HTML. 205 00:16:42,460 --> 00:16:46,310 Bởi vì nếu bạn có một thẻ mở HTML và sau đó rất nhiều thứ ở giữa 206 00:16:46,310 --> 00:16:49,820 và sau đó một số khác đóng cửa HTML tag nhiều sau này trong chương trình, 207 00:16:49,820 --> 00:16:55,420 bạn vừa ăn lên rất nhiều mã HTML của bạn có thể do nhầm lẫn. 208 00:16:56,200 --> 00:17:01,840 >> Tất cả các quyền - nhân vật rất đặc biệt, giống như nhiều ngôn ngữ khác, 209 00:17:01,840 --> 00:17:04,780 chúng ta thoát khỏi bằng cách sử dụng dấu gạch chéo. 210 00:17:04,780 --> 00:17:10,329 Vì vậy, chúng ta có thể sử dụng dấu chấm để xác định bất kỳ nhân vật ngoại trừ một dòng mới. 211 00:17:10,329 --> 00:17:14,550 Chúng tôi có thể sử dụng thoát w để xác định bất kỳ ký tự chữ cái. 212 00:17:14,550 --> 00:17:20,329 Và bằng cách tương tự thoát d cho bất kỳ số nguyên - nhân vật số. 213 00:17:20,630 --> 00:17:27,440 Chúng tôi có thể xác định - chúng ta có thể sử dụng dấu ngoặc để xác định biểu thức có liên quan. 214 00:17:27,440 --> 00:17:30,970 Vì vậy, điều này sẽ chấp nhận a, b, hoặc c. 215 00:17:31,320 --> 00:17:37,000 Và chúng tôi cũng có thể chỉ định hoặc tùy chọn hoặc là một hoặc b. 216 00:17:37,000 --> 00:17:41,110 Ví dụ: - nếu chúng ta đang tìm kiếm nhiều khả năng 217 00:17:41,110 --> 00:17:44,940 trong ngoặc đơn, chúng tôi có thể sử dụng các nhà điều hành hoặc như trong - 218 00:17:44,940 --> 00:17:52,480 vì vậy chúng ta quay trở lại ví dụ này đây. 219 00:17:53,000 --> 00:17:59,790 Và bây giờ chúng ta hãy - chúng ta hãy quay trở lại với ví dụ này ở đây, và sau đó 220 00:17:59,790 --> 00:18:12,290 có ae - vì thế này nên trở lại - tôi đoán đây vẫn là Abraham. 221 00:18:12,290 --> 00:18:17,410 Vì vậy điều này - nếu chúng ta làm tất cả - tuyệt vời. 222 00:18:17,410 --> 00:18:22,700 Vì vậy, chúng ta hãy cập nhật các văn bản ở đây. 223 00:18:22,700 --> 00:18:34,690 "Abraham ăn giăm bông trong khi viền của mình -. Trong khi viền" Tuyệt vời. 224 00:18:44,090 --> 00:18:47,330 Tất cả. Tuyệt vời. Bây giờ chúng ta có được giăm bông, thịt nguội và hem. 225 00:18:48,510 --> 00:18:59,370 Trong khi viền - trong khi ồn ào với anh - trong khi ồn ào để hem anh. Tuyệt vời. 226 00:19:00,350 --> 00:19:03,250 Cùng một điều. 227 00:19:03,820 --> 00:19:09,180 Bây giờ tất cả trở về vẫn chỉ là giăm bông, thịt nguội và hem mà không chọn lên trên hum hoặc anh ta. 228 00:19:09,940 --> 00:19:22,600 Tuyệt vời - vì vậy những gì nếu chúng ta muốn nhìn vào một trong hai điều đó - vì vậy chúng tôi có thể cũng làm 229 00:19:23,510 --> 00:19:33,810 anh ta hay - chúng tôi sẽ quay trở lại đó. 230 00:19:34,810 --> 00:19:45,760 Được rồi - vì vậy - tất cả các quyền - trong các vị trí bạn cũng có thể sử dụng dấu nháy hoặc ký hiệu đô la 231 00:19:45,760 --> 00:19:49,350 để xác định rằng bạn đang tìm kiếm một cái gì đó ở đầu hoặc cuối của một chuỗi. 232 00:19:50,260 --> 00:19:52,260 Hoặc bắt đầu hoặc kết thúc của một từ. 233 00:19:52,400 --> 00:19:54,470 Đó là một cách để sử dụng. 234 00:19:55,630 --> 00:20:01,160 >> Được rồi - vì vậy chúng ta chơi xung quanh với một khối lớn hơn một chút của văn bản. 235 00:20:03,950 --> 00:20:08,310 Chúng ta hãy nói hàng này đây - tuyên bố này đây. 236 00:20:08,310 --> 00:20:11,360 Sức mạnh của biểu thức chính quy là họ có thể xác định mô hình 237 00:20:11,360 --> 00:20:13,390 không chỉ cố định ký tự. 238 00:20:14,900 --> 00:20:18,790 Chúng ta hãy làm cho - cho chúng tôi gọi khối này. 239 00:20:22,400 --> 00:20:27,110 Sau đó chúng tôi sẽ đọc tất cả điều đó nhập 240 00:20:28,890 --> 00:20:50,820 Và sau đó có một - chúng ta hãy làm cho tất cả =; một số điều chúng ta có thể tìm kiếm ở đây là lợi nhuận vì vậy những gì? 241 00:20:50,820 --> 00:20:54,070 Chúng ta có thể tìm kiếm các biểu hiện tai. 242 00:20:55,050 --> 00:21:01,520 Không phải là rất thú vị. Làm thế nào về điều đó? Chúng tôi sẽ xem những gì sẽ xảy ra. 243 00:21:03,710 --> 00:21:05,710 Tôi đã cho nó một vấn đề. 244 00:21:06,380 --> 00:21:10,750 Vì vậy, bất kỳ số điều trước khi tái và tất cả. 245 00:21:10,750 --> 00:21:15,630 Vì vậy mà phải trả lại tất cả mọi thứ từ đầu đến tất cả lại có lẽ một vài lần. 246 00:21:18,800 --> 00:21:21,970 Và sau đó ở đây chúng tôi có sức mạnh của biểu thức thông thường là họ 247 00:21:21,970 --> 00:21:24,900 có thể xác định mẫu không chỉ các nhân vật ở đây là. 248 00:21:24,900 --> 00:21:28,510 Vì vậy, tất cả các con đường lên đến lại cuối cùng, nó bắt đầu với hầu hết trái và là tham lam. 249 00:21:30,710 --> 00:21:32,710 Chúng ta hãy xem - những gì khác chúng ta có thể tìm kiếm. 250 00:21:32,710 --> 00:21:39,860 Tôi đoán một điều nếu bạn quan tâm trong việc tìm kiếm các đại từ cô và anh, 251 00:21:39,860 --> 00:21:44,600 bạn có thể kiểm tra s là bằng 0 hoặc 1 252 00:21:44,600 --> 00:21:49,710 và biểu thức ông, và có lẽ sẽ không quay trở lại - 253 00:21:49,710 --> 00:21:58,020 oh, tôi đoán nó trở về ông bởi vì có chúng tôi đang tìm kiếm sức mạnh, ngày hôm đó, đây được. 254 00:22:00,590 --> 00:22:06,270 Chúng ta hãy cố gắng xác định rằng điều này đã đến lúc bắt đầu một cái gì đó. 255 00:22:06,640 --> 00:22:09,530 Chúng ta hãy xem nếu mà giảm đi. 256 00:22:09,530 --> 00:22:19,630 Vì vậy, chúng ta có thể làm chất béo, và chúng tôi không nhận được bất cứ điều gì vì cô ấy và anh 257 00:22:19,630 --> 00:22:22,870 không xảy ra trong cụm từ này. 258 00:22:24,960 --> 00:22:30,410 Tuyệt vời. Được rồi - vì vậy trở lại với con mèo ở đây. 259 00:22:30,410 --> 00:22:35,720 Mô hình rất phức tạp là làm tổn thương não. 260 00:22:35,720 --> 00:22:40,500 Vì vậy, đó là lý do tại sao chúng ta sử dụng biểu thức thông thường để tránh những vấn đề này. 261 00:22:40,820 --> 00:22:43,520 >> Vì vậy, đây là một số phương thức hữu ích khác bạn có thể chơi với xung quanh. 262 00:22:43,520 --> 00:22:50,290 Chúng tôi đã tìm kiếm ngày hôm nay, nhưng bạn cũng có thể sử dụng kết hợp, tách, FindAll, và các nhóm. 263 00:22:50,290 --> 00:22:53,970 Điều mát mẻ để khác bạn có thể làm với biểu thức thông thường bên cạnh việc chỉ 264 00:22:53,970 --> 00:22:58,870 tìm kiếm mô hình được tham gia một mô hình và tổ chức tất cả các trận đấu - 265 00:22:58,870 --> 00:23:02,530 biến của nó - và sau đó sử dụng những người trong mã của bạn sau này. 266 00:23:02,850 --> 00:23:05,980 Mà có thể khá hữu ích. Những thứ khác có thể được đếm. 267 00:23:05,980 --> 00:23:11,720 Vì vậy, chúng ta có thể đếm số lượng các trường hợp của một mô hình biểu hiện thường xuyên, 268 00:23:11,720 --> 00:23:13,960 và đó là những gì chúng ta có thể sử dụng nhóm các. 269 00:23:13,960 --> 00:23:17,550 Và các chế độ khác nữa cũng có thể. 270 00:23:18,040 --> 00:23:22,980 Vì vậy, tôi chỉ muốn nói thêm một chút về những cách khác bạn có thể sử dụng biểu thức thông thường. 271 00:23:22,980 --> 00:23:29,100 >> Vì vậy, một ứng dụng tiên tiến hơn là trong kết hợp mờ. 272 00:23:29,100 --> 00:23:33,450 Vì vậy, nếu bạn đang tìm kiếm một văn bản cho sự biểu hiện, Julius Caesar, 273 00:23:33,450 --> 00:23:37,740 và bạn nhìn thấy hoặc Gaius Julius Caesar hoặc tên Julius Caesar trong các ngôn ngữ khác, 274 00:23:37,740 --> 00:23:44,400 sau đó bạn cũng có thể muốn chỉ định một số trọng lượng cho những giá trị. 275 00:23:44,400 --> 00:23:48,930 Và nếu nó là đủ gần - nếu nó vượt qua một ngưỡng nào đó - sau đó bạn muốn 276 00:23:48,930 --> 00:23:50,860 để có thể chấp nhận Julius Caesar. 277 00:23:50,860 --> 00:24:00,580 Vì vậy, có một vài hiện thực khác nhau cho rằng trong một vài ngôn ngữ khác. 278 00:24:02,580 --> 00:24:08,420 Dưới đây là một số công cụ khác, Regex Pal - một ứng dụng nhỏ tiện dụng trực tuyến 279 00:24:08,420 --> 00:24:12,190 kiểm tra xem biểu thức thông thường của bạn được cấu tạo một cách chính xác. 280 00:24:12,190 --> 00:24:18,500 Ngoài ra còn có các công cụ độc lập mà bạn có thể chạy từ máy tính của bạn 281 00:24:18,500 --> 00:24:22,100 như siêu Pico, và cũng như chỉ dạy nấu ăn. 282 00:24:22,100 --> 00:24:25,410 Vì vậy, nếu bạn đang làm một dự án có liên quan đến một tấn của biểu thức thông thường 283 00:24:25,410 --> 00:24:29,810 đây có lẽ là nơi đi ra ngoài phạm vi của ngày hôm nay. 284 00:24:31,520 --> 00:24:35,770 Và sau đó chỉ cần cung cấp cho bạn một cảm giác như thế nào phổ biến là 285 00:24:35,770 --> 00:24:44,090 có grep trong Unix, Perl đã được xây dựng trong, và C có PCRE cho C. 286 00:24:44,090 --> 00:24:48,890 Và sau đó tất cả các ngôn ngữ khác cũng có các gói biểu thức chính quy 287 00:24:48,890 --> 00:24:52,020 hoạt động với cú pháp tương tự về cơ bản chúng ta có một hương vị của ngày hôm nay. 288 00:24:52,020 --> 00:24:54,790 PHP, Java, Ruby, và như vậy. 289 00:24:56,080 --> 00:24:58,980 >> Google Code Search thực sự là đáng nói, nó là một trong những 290 00:24:58,980 --> 00:25:05,720 tương đối ít các ứng dụng ra khỏi đó cho phép công chúng truy cập 291 00:25:05,720 --> 00:25:07,800 cơ sở dữ liệu sử dụng biểu thức thông thường. 292 00:25:07,800 --> 00:25:12,920 Vì vậy, nếu bạn nhìn trên Google Code tìm kiếm, bạn có thể tìm mã 293 00:25:12,920 --> 00:25:16,880 nếu bạn đang tìm kiếm một cách thể hiện của một chức năng có thể được sử dụng, 294 00:25:16,880 --> 00:25:21,610 bạn có thể sử dụng một biểu hiện thường xuyên để thấy rằng chức năng được sử dụng trong tất cả các loại trường hợp khác nhau. 295 00:25:21,610 --> 00:25:28,000 Bạn có thể tìm fwrite, và sau đó bạn có thể tìm lá cờ của viết hoặc đọc 296 00:25:28,000 --> 00:25:32,000 nếu bạn muốn một ví dụ về fwrite được sử dụng trong trường hợp đó. 297 00:25:33,530 --> 00:25:37,010 Vì vậy, tương tự như vậy, và đây là một số tài liệu tham khảo. 298 00:25:37,010 --> 00:25:40,990 Điều này sẽ có sẵn trực tuyến là tốt, vì vậy sẽ chuyển tiếp nếu 299 00:25:40,990 --> 00:25:45,560 bạn muốn xem xét Python, grep, Perl - bạn chỉ muốn nhận được một số nguồn cảm hứng 300 00:25:45,560 --> 00:25:50,650 hoặc nếu bạn muốn xem thêm tại lý thuyết đây là một số nhảy ra ngoài nơi. 301 00:25:50,650 --> 00:25:53,870 Cám ơn rất nhiều. 302 00:25:58,470 --> 00:25:59,910 [CS50.TV]