Làm cách nào để sử dụng regex trong tệp HTML?
Được rồi, tôi thừa nhận, tôi đã có một chút sợ hãi với các biểu thức chính quy khi mới bắt đầu với tư cách là một nhà phát triển. Tất cả những gì tôi cần là một phương thức Chuỗi con và một phương thức Show
Vì vậy, hãy xem xét một nhiệm vụ phổ biến là khớp các thẻ HTML trong nội dung của một số văn bản. Ban đầu khi bạn nghĩ đến việc phân tích cú pháp một thẻ HTML, nó có vẻ khá dễ dàng. Bạn có thể xem xét biểu thức sau
Được dịch đại khái, biểu thức này tìm kiếm thẻ bắt đầu và tên thẻ, theo sau là khoảng trắng và sau đó là bất kỳ thứ gì không kết thúc thẻ Bây giờ, điều này có thể sẽ hoạt động 99 trên 100 lần, nhưng có một lỗ hổng trong biểu thức này. Bạn có nhìn thấy nó không? Hy vọng bạn thấy vấn đề ở đây. Biểu thức sẽ phù hợp
Mỗi trường hợp này đều khá đơn giản. Trong trường hợp đầu tiên, bạn có thể làm như sau
Phần
Phần
đánh giá
Tuy nhiên, việc sử dụng đánh giá lười biếng tiêu thụ ít ký tự khớp với biểu thức nhất, do đó, kết quả khớp đầu tiên sử dụng Biểu thức đầy đủ để khớp thẻ HTML là sự kết hợp đáng yêu của các ký tự được trình bày ở phần đầu của bài đăng này. Đó là phiên bản sửa đổi của phiên bản được trình bày trong cuốn sách của Friedl Tuy nhiên, tôi không khuyên bạn chỉ cần ghi nó vào mã của mình. Thay vào đó, bạn nên xem xét việc thêm nó vào một tập hợp thư viện biểu thức chính quy Không biết làm thế nào? . Trong phần sau, tôi sẽ giải thích chi tiết hơn về chức năng của đoạn mã này và cách sử dụng hợp ngữ đã biên dịch. Thật vô trách nhiệm khi tôi không làm điều đó bây giờ. ;) Bài viết này là bài thứ ba trong loạt bài viết về thực thi biểu thức chính quy bằng cách sử dụng tệp thực thi 6 đi kèm với hệ điều hành Linux. Lệnh 6 lọc nội dung trong một tệp hoặc dưới dạng đầu ra từ 8Bài viết đầu tiên trong loạt bài này đã mô tả kiến thức cơ bản về cách sử dụng siêu ký tự và ký tự thông thường để tạo biểu thức chính quy. Phần thứ hai đã thảo luận về cách làm việc với bộ định lượng, tập hợp mẫu, nhóm và ranh giới từ trong biểu thức chính quy. Bài viết này sử dụng các tính năng được mô tả trong các bài viết trước, cùng với các tính năng mới, để khớp và lọc nội dung trong tệp HTML So khớp và truy xuất văn bản từ HTML là một nhiệm vụ phổ biến đối với nhiều chuyên gia CNTT, đặc biệt khi khắc phục sự cố trong các trang web. Do đó, có thể áp dụng các biểu thức chính quy cho các tệp HTML là một kỹ năng hữu ích Bài viết sử dụng 6 vì điều đó sẽ không yêu cầu bạn thiết lập một môi trường mã hóa cụ thể hoặc viết bất kỳ mã lập trình phức tạp nào để làm việc với các ví dụ về biểu thức chính quy được trình bày trong bài viết này. Tất cả những gì bạn cần làm là sao chép và dán một ví dụ vào dòng lệnh của thiết bị đầu cuối Linux và bạn sẽ thấy kết quả ngay lập tứcBài viết này được chia thành ba phần. Phần đầu tiên chỉ cho bạn cách tạo các biểu thức chính quy thực thi đối với một tệp HTML. Phần thứ hai chỉ cho bạn cách làm việc với nhiều tệp HTML. Phần cuối chỉ cho bạn cách sử dụng tiện ích dòng lệnh đặc biệt có tên pcre2grep để thực thi các biểu thức chính quy đối với văn bản được phân tách thành nhiều dòng trong một hoặc nhiều tệp HTML Ký tự thông thường so với siêu ký tựMột ký tự thông thường đại diện cho chính nó trong văn bản bạn đang tìm kiếm. Ví dụ bao gồm các chữ cái 0, 1 hoặc 2 hoặc các chữ số 3 hoặc 4. Khi bạn khai báo một ký tự thông thường trong một biểu thức chính quy, công cụ biểu thức chính quy sẽ tìm kiếm nội dung cho ký tự đã khai báoSiêu ký tự đại diện cho một nhóm ký tự hoặc các khía cạnh khác của tìm kiếm. Bạn có thể nghĩ về một siêu ký tự như một biểu tượng giữ chỗ. Ví dụ: ký tự phụ 5 (dấu chấm) đại diện cho "bất kỳ ký tự nào" và ký tự phụ 6 đại diện cho bất kỳ chữ số nàoChạy các biểu thức chính quy bằng cách sử dụng grep đối với một tệp HTMLTrong phần này, bạn sẽ thấy nhiều biểu thức chính quy được thực thi đối với một tệp HTML. Nội dung HTML được sử dụng để trình diễn như sau. Lưu trữ nội dung trong một tệp có tên 7
Định dạng để sử dụng grep đối với một tệpĐịnh dạng để sử dụng 6 đối với tệp HTML tại dòng lệnh như sau
Các yếu tố của cú pháp như sau
Các phần phụ sau khớp với các dòng riêng lẻ trong một tệp Khớp các lần xuất hiện của một chuỗi bằng các ký tự thông thườngVí dụ sau khớp với các lần xuất hiện của một tập hợp các ký tự thông thường trong tệp HTML có tên 7. Trong trường hợp này, các ký tự thông thường từ chuỗi 9
Logic mà biểu thức chính quy thực thi như sau. Khớp bất kỳ sự xuất hiện nào của các ký tự thông thường 9 trong tệp 7đầu ra là
Kết hợp các lần xuất hiện của một chuỗi bằng cách sử dụng siêu ký tự và ký tự thông thườngVí dụ sau khớp với các lần xuất hiện của một tập hợp các siêu ký tự và ký tự thông thường trong 7
Logic mà biểu thức chính quy thực thi như sau. Trong tệp 7, khớp bất kỳ lần xuất hiện nào của ký tự thông thường 4 theo sau là lần xuất hiện của bất kỳ ký tự nào bằng 0 hoặc nhiều lần ( 5) cho đến khi xuất hiện ký tự thông thường 9đầu ra là
Một phiên bản mở rộng của ví dụ trước là
Logic mà biểu thức chính quy thực thi như sau. Trong tệp 7, khớp bất kỳ lần xuất hiện nào của ký tự thông thường 4 theo sau là lần xuất hiện của bất kỳ ký tự nào bằng 0 hoặc nhiều lần ( 5) cho đến khi xuất hiện ký tự thông thường 9. Sau đó, khớp bất kỳ ký tự nào bằng 0 hoặc nhiều lần ( 5) cho đến khi xuất hiện ký tự thông thường 2. Lưu ý rằng siêu ký tự thoát ( 3) được sử dụng trước ký tự thông thường dấu chấm ( 5) như vậy. 5. Việc sử dụng siêu ký tự thoát cho biết rằng biểu thức chính quy phải xử lý dấu chấm dưới dạng ký tự thông thường ( 5) chứ không phải dưới dạng siêu ký tự có nghĩa là "bất kỳ ký tự nào. "đầu ra là
Khớp không phân biệt chữ hoa chữ thường bằng cách sử dụng siêu ký tự và ký tự thông thườngVí dụ sau minh họa cách chạy 6 bằng cách sử dụng biểu thức chính quy không phân biệt chữ hoa chữ thường, khớp với các ký tự viết hoa hoặc viết thường. Chìa khóa để tạo biểu thức chính quy không phân biệt chữ hoa chữ thường là sử dụng tùy chọn 8 khi chạy 6. Tùy chọn 8 biểu thị quá trình xử lý không phân biệt chữ hoa chữ thườngTrong trường hợp này, biểu thức chính quy trả về bất kỳ dòng nào khớp với các ký tự thông thường 1 theo cách không phân biệt chữ hoa chữ thường
Logic mà biểu thức chính quy thực thi như sau. Trong tệp regex-content-01. html, khớp với bất kỳ dòng nào không có hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ( 5) cho đến khi các ký tự thông thường 1 xuất hiện ở dạng chữ thường hoặc chữ hoa. Sau đó khớp 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ( 5)Kết quả là như sau.
Đối sánh các thực thể danh sách HTMLVí dụ sau tìm kiếm các dòng văn bản khớp với một chuỗi bắt đầu bằng thẻ 5 và kết thúc bằng thẻ 6 0Logic mà biểu thức chính quy thực thi như sau. Trong tệp 7, khớp các dòng văn bản có sự xuất hiện của các ký tự thông thường 5 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ( 5), theo sau là các ký tự thông thường 6đầu ra là 1Khớp các lần xuất hiện của một chuỗi trong thẻ HTML theo một loạt giá trị IDVí dụ sau định nghĩa một lớp ký tự khai báo một dãy các chữ số khớp với thuộc tính 1 của thẻ 2 2Logic mà biểu thức chính quy thực thi như sau. Trong tệp 7, khớp các dòng văn bản có sự xuất hiện của các ký tự thông thường 4 theo sau là bất kỳ ký tự thông thường nào là một số trong phạm vi từ 2 đến 4 ( 5). Sau đó khớp các ký tự thông thường 6 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ( 5) sau đó được theo sau bởi các ký tự thông thường 6đầu ra là 3Làm việc với nhiều tệp HTMLCác ví dụ sau minh họa cách thực thi các biểu thức chính quy đối với nhiều tệp HTML. Nếu bạn muốn có kinh nghiệm thực tế khi làm việc với các ví dụ trong phần này, hãy sao chép và dán mã HTML sau vào một tệp có tên 9 và lưu tệp đó vào cùng thư mục mà bạn đã tạo trước đó 7 4Các định dạng để sử dụng grep đối với nhiều tệpĐịnh dạng để sử dụng 6 đối với nhiều tệp HTML tại dòng lệnh như sau 5Các yếu tố của cú pháp như sau
Định dạng để sử dụng 6 với đặc tả tệp đối với nhiều tệp HTML như sau 6 13 chọn tên tệp bằng ký tự đại diện. Ví dụ: khai báo sau tìm tất cả các tệp trong thư mục làm việc hiện tại có bất kỳ tên tệp nào kết thúc bằng phần mở rộng tên tệp 14 7Khai báo sau tìm tất cả các tệp bắt đầu bằng ký tự 15, tiếp theo là ký tự bất kỳ ( 16) và kết thúc bằng phần mở rộng 14 8Các phần phụ sau khớp với các dòng riêng lẻ trong nhiều tệp Khớp một chuỗi ký tự thông thường trên nhiều tệp HTMLVí dụ sau khớp với tất cả các chuỗi ký tự thông thường 18 xuất hiện trong tất cả các tệp trong thư mục hiện tại có tên tệp kết thúc bằng phần mở rộng 14 9Logic mà biểu thức chính quy thực thi như sau. Khớp bất kỳ sự xuất hiện nào của các ký tự thông thường 18 trong tất cả các tệp trong thư mục hiện tại có tên tệp kết thúc bằng phần mở rộng 14đầu ra là 0Khớp các dòng văn bản trên nhiều tệp HTML theo siêu ký tự và ký tự thông thườngLệnh sau khớp với một chuỗi cộng với tất cả văn bản xung quanh trên cùng một dòng 1Logic mà biểu thức chính quy thực thi như sau. Trong tất cả các tệp trong thư mục hiện tại có tên tệp kết thúc bằng phần mở rộng 14, khớp các dòng văn bản không có hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ( 5), sau đó là các ký tự thông thường 18, tiếp theo là không hoặc nhiều lần xuất hiện của bất kỳ ký tự nào Kết quả là như sau 2Khớp các lần xuất hiện của các ký tự trong thẻ HTML trên nhiều tệp HTMLVí dụ sau đây tìm tất cả các ký tự giữa các thẻ HTML 5 và 6 trong tất cả các tệp trong thư mục hiện tại có tên tệp kết thúc bằng phần mở rộng 14 3Logic mà biểu thức chính quy thực thi như sau. Trong tất cả các tệp trong thư mục hiện tại có tên tệp kết thúc bằng phần mở rộng 14, khớp các dòng văn bản có sự xuất hiện của các ký tự thông thường 5 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ( 5), tiếp theo là các ký tự thông thường 6đầu ra là 4Khớp các lần xuất hiện của các ký tự cụ thể trong thẻ HTML trên nhiều tệp HTMLLệnh sau tìm các thực thể 5 chứa một chuỗi cụ thể, 18 5Logic mà biểu thức chính quy thực thi như sau. Trong tất cả các tệp trong thư mục hiện tại có tên tệp kết thúc bằng phần mở rộng 14, khớp các dòng văn bản có sự xuất hiện của các ký tự thông thường 5 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ( 5), sau đó là các ký tự thông thường Vịt, đầu ra là 6Làm việc trên nhiều dòng HTMLMột trong những thiếu sót của lệnh 6 là nó không cho phép bạn thực thi một biểu thức chính quy trên nhiều dấu ngắt dòng trong văn bản. Ví dụ: xem xét tệp 9, có đoạn mã HTML sau 7Biểu thức chính quy sau đây trong lệnh 6 sẽ không khớp với nội dung 43 trong đoạn mã trước, bởi vì 6 không khớp với các siêu ký tự ngắt dòng, chẳng hạn như 45 8Các phương ngữ khác của biểu thức chính quy, chẳng hạn như các phương ngữ được tìm thấy trong JavaScript, Java, PHP và C#, có thể hoạt động với ngắt dòng, nhưng 6 thì không. Để khớp nhiều dòng văn bản tại dòng lệnh, bạn cần sử dụng 47Cài đặt pcre2grepTệp thực thi 47 thường cần được quản trị viên cài đặt trên máy tính Linux. Lệnh không gửi theo mặc địnhChạy các lệnh sau để cài đặt 47 trên máy tính chạy Red Hat Enterprise Linux, Fedora hoặc CentOS Stream 9Chạy các lệnh sau để cài đặt 47 trên máy tính chạy Ubuntu hoặc hệ thống khác dựa trên Debian 0Khi bạn đã cài đặt 47, bạn có thể chạy các ví dụ sau đối với các tệp HTML mà bạn đã cài đặt trước đóTìm nội dung giữa các thẻ HTML được xác định trên hai dòngVí dụ sau sử dụng 47 để khớp tất cả nội dung bao gồm hai dòng theo cách không phân biệt chữ hoa chữ thường giữa các thẻ 53 và 54, bao gồm cả chính các thẻ đó, trong tất cả các tệp HTML trong thư mục hiện tạiVí dụ sử dụng các tùy chọn 55 với 47. Tùy chọn 57 cho phép khớp trên nhiều dòng. Tùy chọn 58 tiến hành so khớp theo cách không phân biệt chữ hoa chữ thường. Ví dụ sử dụng ký tự phụ 45 để biểu thị ngắt dòng 1Logic mà biểu thức chính quy thực thi như sau. Khớp nội dung trong bất kỳ tệp nào trong thư mục hiện tại có phần mở rộng là 14. Tìm kiếm nội dung tệp để khớp với các ký tự 61 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ( 5) cho đến khi xuất hiện ký tự meta ngắt dòng ( 45). Sau đó, tiếp tục so khớp các lần xuất hiện của bất kỳ ký tự nào ( 5) cho đến khi xuất hiện các ký tự thông thường 54đầu ra là 2Ví dụ hiển thị ở trên chỉ khớp với một ngắt dòng. Biểu thức chính quy sẽ không tìm thấy kết quả phù hợp nếu nội dung bao gồm các thẻ 53 và 54 bao gồm nhiều hơn hai dòng, như vậy 3Cách giải quyết vấn đề là sử dụng siêu ký tự ( 68) để biểu thức chính quy diễn giải ký tự dấu chấm ( 5) để bao gồm ngắt dòng, như minh họa trong ví dụ tiếp theoTìm nội dung giữa các thẻ danh sách không có thứ tự trong tệp HTML bằng cách sử dụng (?s)Ví dụ sau đây thêm các siêu ký tự ( 68) vào biểu thức chính quy để làm cho nó xử lý ký tự chấm ( 5) để bao gồm các ngắt dòng dưới dạng "bất kỳ ký tự nào" 4Logic mà biểu thức chính quy thực thi như sau. Khớp nội dung trong bất kỳ tệp nào trong thư mục hiện tại có phần mở rộng là 14. Siêu ký tự đại diện "ký tự bất kỳ" ( 5) có thể bao gồm ngắt dòng như được biểu thị bởi ký tự đại diện 74 ở đầu biểu thức chính quy. Bắt đầu bằng cách so khớp một lần xuất hiện của các ký tự thông thường 75 , tiếp theo là một hoặc nhiều lần xuất hiện của bất kỳ ký tự nào bao gồm cả ngắt dòng ( 76), tiếp theo là một lần xuất hiện của các ký tự thông thường 77đầu ra là 5Để tất cả chúng cùng nhauLọc nội dung trong tệp HTML là một kỹ năng hữu ích cho bất kỳ chuyên gia CNTT nào làm việc trên web. Cho dù bạn là nhà phát triển giao diện người dùng đang cố gắng gỡ lỗi một trang web hoạt động sai hay quản trị viên hệ thống đang tìm kiếm các từ hoặc cụm từ cụ thể trong các thư mục chứa đầy các tệp HTML, thì việc có thể thực thi các biểu thức chính quy bằng cách sử dụng 6 hoặc trên nhiều dòng văn bản bằng cách sử dụng 79 là Các kỹ thuật được đề cập trong bài viết này chỉ là phần giới thiệu. Còn rất nhiều thứ để học. Tuy nhiên, những điều cơ bản được trình bày ở đây sẽ cung cấp một nền tảng vững chắc để giúp bạn tiến lên trong hành trình hướng tới việc thành thạo các biểu thức chính quy Bạn có thể sử dụng regex trong tài liệu HTML không?Bạn không bao giờ nên sử dụng biểu thức chính quy để phân tích cú pháp đầy đủ tài liệu HTML vì biểu thức chính quy không dành cho những tác vụ như vậy . Thay vào đó, bạn có thể sử dụng trình phân tích cú pháp tài liệu HTML hoặc XML có thể thực hiện xác thực cùng với phân tích cú pháp.
Regex trong HTML là gì?Biểu thức chính quy là mẫu ký tự . Mẫu được sử dụng để thực hiện các chức năng "tìm kiếm và thay thế" khớp mẫu trên văn bản. Trong JavaScript, Đối tượng RegExp là một mẫu có Thuộc tính và Phương thức.
Tại sao không sử dụng regex cho HTML?Regex không phù hợp để phân tích cú pháp HTML vì HTML không phải là ngôn ngữ thông thường . Regex có lẽ sẽ không phải là công cụ để tiếp cận khi phân tích mã nguồn. Có các công cụ tốt hơn để tạo đầu ra được mã hóa. Tôi sẽ tránh phân tích cú pháp đường dẫn của URL và tham số truy vấn bằng biểu thức chính quy.
*$ nghĩa là gì trong regex?*$ có nghĩa là - khớp, từ đầu đến cuối, bất kỳ ký tự nào xuất hiện từ 0 lần trở lên . Về cơ bản, điều đó có nghĩa là - khớp mọi thứ từ đầu đến cuối chuỗi. |