[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] [Đại học John Mussman-Harvard] [Đây là CS50.-CS50.TV] Được rồi. Vâng, chào đón tất cả mọi người. Đây là CS50 2012. Tên tôi là John, và tôi sẽ nói hôm nay về biểu thức thông thường. 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 trong mã tích cực về cơ bản phù hợp với mô hình và dây. Vì vậy, đây là một truyện tranh web từ VNAV. Trong truyện tranh này có một bí ẩn giết người mà kẻ giết người có theo sau ai đó đi nghỉ, và các nhân vật chính phải tìm kiếm thông qua 200 MB của các email tìm kiếm một địa chỉ. Và chúng được về để cho lên khi một người biết biểu thức thông thường - có lẽ là một siêu anh hùng - leo thang xuống và viết một số mã và giải quyết những bí ẩn giết người. Vì vậy, có lẽ đó sẽ là một cái gì đó mà bạn sẽ được trao quyền để làm sau buổi hội thảo này. 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ữ và cung cấp cho bạn đủ đủ tiền để đi sau khi nhiều nguồn lực hơn mình. Biểu thức để thường xuyên nhìn về cơ bản như thế này. Đây là một biểu hiện thường xuyên trong Ruby. Nó không phải là terribly khác nhau qua ngôn ngữ. 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. Và đây là một biểu hiện thường xuyên để tìm trong mô hình địa chỉ email. Vì vậy, chúng ta thấy ở các bit đầu tiên sẽ cho bất kỳ ký tự chữ và số. Đó là bởi vì địa chỉ email thường xuyên phải bắt đầu với một chữ cái. Và sau đó bất kỳ ký tự đặc biệt tiếp theo là biểu tượng @. Và sau đó điều tương tự cho tên miền. Và sau đó từ 2 đến 4 ký tự để tìm kiếm các com.,. Net, và như vậy. Vì vậy, đó là một ví dụ của biểu thức chính quy. 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. Họ làm so sánh, lựa chọn, và thay thế. 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. Vì vậy, trước khi David trích lập thư mục CS50 chúng ta có thể tìm kiếm 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, 3 số lượng nhiều hơn, một dấu gạch ngang, 2 con số, và sau đó 54. 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 đó. 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ư biểu thức thông thường, vì vậy - ví dụ - trong tập tin dictionary.C cho phép đặt vấn đề kiểm tra bạn có thể đã sử dụng fscanf đọc trong một từ trong từ điển. 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ự. Vì vậy, nó có phần giống như một biểu hiện thường xuyên thô sơ. Và bạn có thể có 45 nhân vật phù hợp với các hóa đơn có và chọn những người lên. Và sau đó là ví dụ thứ hai trong vấn đề lập trình web mới nhất đặ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. 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 phù hợp hoặc đăng nhập hoặc đăng xuất đăng ký. PHP. Và sau đó trở về đúng hay sai dựa trên đó phù hợp với biểu hiện thường xuyên. Vì vậy, khi bạn sử dụng biểu thức chính quy? Tại sao anh lại ở đây ngày hôm nay? 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ì đó hiện công việc cho bạn thậm chí dễ dàng hơn. Vì vậy, XML và HTML thực sự khá khó khăn viết biểu thức thông thường như chúng ta sẽ thấy trong một chút. Vì vậy, có phân tích cú pháp dành riêng cho những ngôn ngữ. 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. 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, nhưng nói rằng bạn muốn có một địa chỉ email cụ thể và dần dần 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. Vì vậy, đó sẽ là một thương mại giảm. 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. 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 để đưa vào thời gian và viết phân tích cú pháp hiệu quả hơn. Và cuối cùng có một vấn đề lịch sử với sự đều đặn các biểu thức và ngôn ngữ. Biểu thức thông thường là thực sự mạnh hơn biểu thức thông thường mỗi nói trong một ý nghĩa chính thức. Vì vậy, tôi không muốn đi quá xa vào các lý thuyết chính thức, 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. 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. Vì vậy, về cơ bản có một hệ thống phân cấp Chomsky cho các ngôn ngữ, 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, và các hoạt động sao Kleene rằng chúng ta sẽ thấy trong một vài phút. Nếu bạn quan tâm về mặt lý thuyết có khá nhiều xảy ra ở đó dưới mui xe. 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 trong những năm 1950, và sau đó chúng tôi đã biên tập đơn giản mà kết hợp biểu thức thông thường - chỉ tìm kiếm chuỗi. Grep - đó là một công cụ dòng lệnh - là một trong những người đầu tiên 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. Trong thập niên 80, Perl được xây dựng - là một ngôn ngữ lập trình kết hợp biểu thức thông thường rất nổi bật. Và sau đó gần đây chúng tôi đã có Perl biểu thức chính quy tương thích 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ự. Tất nhiên sự kiện quan trọng nhất là vào năm 2008 nơi có các biểu hiện thường xuyên quốc gia ngày đầu tiên, mà tôi tin là ngày 01 tháng 6 nếu bạn muốn ăn mừng đó. Một lần nữa, nhiều hơn chỉ là một chút lý thuyết ở đây. 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. Một cách đơn giản là xây dựng các biểu hiện mà bạn sẽ 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à 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?" Và sau đó chạy đó. 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ẽ cách hiệu quả nhất để làm điều đó. Và sau đó nếu bạn - một lựa chọn khác là để giữ cho xây dựng lại biểu hiện như bạn đi, và đó là khả năng mô phỏng. Và những nỗ lực ban đầu tại các thuật toán biểu thức chính quy là tương đối đơn giản và tương đối nhanh, nhưng không có nhiều tính linh hoạt. Vì vậy, để làm thậm chí một số trong những điều mà chúng ta sẽ xem xét 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 triển khai có nguy cơ bị chậm hơn nhiều, vì thế đó là một cái gì đó để nhớ 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 khai thác tiềm năng cho việc thực hiện mới hơn của biểu thức thông thường để trở nên rất phức tạp. 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, bạn có xâm nhập có thể bằng cách làm cho các vòng lặp đệ quy tàn phá năng lực của bộ nhớ. 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 bằng cách tương tự để bò trong Anglo-Saxon. Được rồi, do Thư viện Python nhiều bạn ở đây trong người có máy tính Mac, do đó, bạn thực sự có thể kéo này lên trên màn hình của bạn. Biểu thức thông thường được xây dựng vào Python. 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. 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 như chúng tôi chơi xung quanh đây. 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 bạn sẽ thấy rằng phiên bản đi lên trong các thiết bị đầu cuối. 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. 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 đi kèm với đó cài đặt sẵn. Vì vậy, không quá khác nhau. Đượ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. 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 và sau đó lấy kết quả của re.search. Và việc tìm kiếm có 2 đối số. Đầu tiên là biểu hiện thường xuyên, và thứ hai là văn bản hoặc chuỗi bạn muốn phân tích. Và sau đó tôi in ra result.group. Vì vậy, đây là 2 chức năng cơ bản, chúng ta sẽ thấy ngày nay trong học tập về biểu thức thông thường. Vì vậy chỉ cần phá vỡ biểu hiện thường xuyên ở đây h và sau đó \ w và sau đó m do đó, \ w chỉ chấp nhận bất kỳ chữ cái trong đó. Vì vậy, ở đây chúng tôi đang tìm kiếm một "h" và sau đó một chữ cái và sau đó m, vì vậy đây có thể sẽ phù hợp với giăm bông trong, "Abraham Lincoln và ham bánh mì." Đây là kết quả của nhóm đó. 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. Vì vậy, tôi đoán tôi sẽ đi trước và kéo mà lên đây. Python tái nhập khẩu. 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à, "Abraham," chúng ta hãy phóng to - có chúng tôi đi. Văn bản là, "Abraham ăn giăm bông." Được rồi, và sau đó kết quả = re.search. 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. 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ố, dấu hiệu tỷ lệ phần trăm, bất cứ điều gì như thế. Và sau đó văn bản - sự bùng nổ - và sau đó result.group--yeah. Vì vậy, đó chỉ là cách để thực hiện các chức năng cơ bản ở đây. 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 và dây bên trong và những thứ có thể trông giống như trình tự thoát ra, 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. Và rằng chỉ cần nhìn như thế. 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ì. Nhưng đó là cách bạn sẽ thực hiện nó, chỉ cần trước khi chuỗi các biểu hiện thường xuyên bạn đặt chữ r. Được rồi, vì vậy hãy để chúng tôi tiếp tục đi. Đượ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. Vì vậy, một điều mà bạn muốn làm là lặp lại điều như bạn đang tìm kiếm thông qua văn bản. Vì vậy, để làm một theo sau bởi bất kỳ số b - bạn làm ab *. Và sau đó có một loạt các quy tắc khác nữa. 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 thường được sử dụng những người thân. Vì vậy, ab + là một tiếp theo bất kỳ N lớn hơn 0 b. ab? là một tiếp theo 0 hoặc 1 b. ab {N} là một tiếp theo N b, và sau đó như vậy. 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 mà có thể có thể xuất hiện. 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. 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. 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." Vì vậy, tôi đã thay đổi tên Abraham Lincoln với Abraham. 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, và nó chỉ trả về ham trong trường hợp này. 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. 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 đó. 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ả. Vì vậy, mà chỉ có thể trông giống như tất cả = re.findall ('h.m, văn bản) và sau đó all.group (). 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. Vì vậy, đó là một lựa chọn khác. 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. Chúng ta hãy nhìn vào ví dụ này. 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 sử dụng các nhà điều hành sao Kleene. Vì vậy, cho, "Abraham Lincoln làm cho bánh sandwich giăm bông," và tôi chỉ có trở lại m như một kết quả. Lý do cho sự sai lầm mà là tôi có thể đã thực hiện bất kỳ số lượng h là bởi vì tôi đã không chỉ định bất cứ điều gì để đi ở giữa h và m. Ví dụ chỉ có mà đã có m - các ví dụ chỉ có với m trong nó và bất kỳ số lượng của h chỉ là những chuỗi m. 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." 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. Và nếu bạn chỉ là bắt đầu và nghĩ, "Ồ, được rồi, và điều này sẽ 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 tất cả các con đường lên đến hết ham. Đó là tham lam, nó thấy h - tất cả các văn bản khác này - m, và đó là những gì nó cần in Đâ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ể chỉ định cho nó không được tham lam sử dụng các chức năng khác. Nhưng đây là một cái gì đó chúng ta phải lưu ý đặc biệt khi nhìn vào văn bản HTML, đó là lý do mà biểu thức thông thường là khó khăn cho HTML. Bởi vì nếu bạn có một thẻ mở HTML và sau đó rất nhiều thứ ở giữa và sau đó một số khác đóng cửa HTML tag nhiều sau này trong chương trình, bạn vừa ăn lên rất nhiều mã HTML của bạn có thể do nhầm lẫn. 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, chúng ta thoát khỏi bằng cách sử dụng dấu gạch chéo. 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. Chúng tôi có thể sử dụng thoát w để xác định bất kỳ ký tự chữ cái. Và bằng cách tương tự thoát d cho bất kỳ số nguyên - nhân vật số. 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. Vì vậy, điều này sẽ chấp nhận a, b, hoặc c. 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. Ví dụ: - nếu chúng ta đang tìm kiếm nhiều khả năng trong ngoặc đơn, chúng tôi có thể sử dụng các nhà điều hành hoặc như trong - vì vậy chúng ta quay trở lại ví dụ này đây. 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 đó có ae - vì thế này nên trở lại - tôi đoán đây vẫn là Abraham. Vì vậy điều này - nếu chúng ta làm tất cả - tuyệt vời. Vì vậy, chúng ta hãy cập nhật các văn bản ở đây. "Abraham ăn giăm bông trong khi viền của mình -. Trong khi viền" Tuyệt vời. 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. Trong khi viền - trong khi ồn ào với anh - trong khi ồn ào để hem anh. Tuyệt vời. Cùng một điều. 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. 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 anh ta hay - chúng tôi sẽ quay trở lại đó. Đượ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 để 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. Hoặc bắt đầu hoặc kết thúc của một từ. Đó là một cách để sử dụng. Đượ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. Chúng ta hãy nói hàng này đây - tuyên bố này đây. Sức mạnh của biểu thức chính quy là họ có thể xác định mô hình không chỉ cố định ký tự. Chúng ta hãy làm cho - cho chúng tôi gọi khối này. Sau đó chúng tôi sẽ đọc tất cả điều đó nhập 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ì? Chúng ta có thể tìm kiếm các biểu hiện tai. 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. Tôi đã cho nó một vấn đề. Vì vậy, bất kỳ số điều trước khi tái và tất cả. 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. Và sau đó ở đây chúng tôi có sức mạnh của biểu thức thông thường là họ có thể xác định mẫu không chỉ các nhân vật ở đây là. 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. Chúng ta hãy xem - những gì khác chúng ta có thể tìm kiếm. 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, bạn có thể kiểm tra s là bằng 0 hoặc 1 và biểu thức ông, và có lẽ sẽ không quay trở lại - 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. 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ì đó. Chúng ta hãy xem nếu mà giảm đi. 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 không xảy ra trong cụm từ này. Tuyệt vời. Được rồi - vì vậy trở lại với con mèo ở đây. Mô hình rất phức tạp là làm tổn thương não. 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. 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. 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. Đ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ỉ 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 - biến của nó - và sau đó sử dụng những người trong mã của bạn sau này. Mà có thể khá hữu ích. Những thứ khác có thể được đếm. 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, và đó là những gì chúng ta có thể sử dụng nhóm các. Và các chế độ khác nữa cũng có thể. 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. Vì vậy, một ứng dụng tiên tiến hơn là trong kết hợp mờ. 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, 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, sau đó bạn cũng có thể muốn chỉ định một số trọng lượng cho những giá trị. Và nếu nó là đủ gần - nếu nó vượt qua một ngưỡng nào đó - sau đó bạn muốn để có thể chấp nhận Julius Caesar. 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. 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 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. 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 như siêu Pico, và cũng như chỉ dạy nấu ăn. 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 đây có lẽ là nơi đi ra ngoài phạm vi của ngày hôm nay. 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à có grep trong Unix, Perl đã được xây dựng trong, và C có PCRE cho C. 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 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. PHP, Java, Ruby, và như vậy. Google Code Search thực sự là đáng nói, nó là một trong những tương đối ít các ứng dụng ra khỏi đó cho phép công chúng truy cập cơ sở dữ liệu sử dụng biểu thức thông thường. Vì vậy, nếu bạn nhìn trên Google Code tìm kiếm, bạn có thể tìm mã 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, 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. Bạn có thể tìm fwrite, và sau đó bạn có thể tìm lá cờ của viết hoặc đọc nếu bạn muốn một ví dụ về fwrite được sử dụng trong trường hợp đó. Vì vậy, tương tự như vậy, và đây là một số tài liệu tham khảo. Đ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 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 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. Cám ơn rất nhiều. [CS50.TV]