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 IndexOf và tôi đã thiết lập. Nhưng sau một vài dự án yêu cầu xử lý văn bản cường độ cao, tôi nhận ra sức mạnh và tiện ích của các biểu thức chính quy. Chúng nên nằm trong vành đai công cụ của mọi nhà phát triển. Cuối cùng, tôi khuyên bạn nên làm chủ các biểu thức chính quy của Jeffrey Friedl. Đây thực sự là cuốn sách về Biểu thức chính quy. Đọc nó sẽ làm cho Regex-Fu của bạn trở nên mạnh mẽ

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?

Làm cách nào để sử dụng regex trong tệp HTML?

Hy vọng bạn thấy vấn đề ở đây. Biểu thức sẽ phù hợp

name='single quoted value' name=notquotedvaluewithnowhitespace name

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

\w+\s*=\s*"[\^"]*"

Phần IndexOf0 khớp với một trích dẫn kép, theo sau là bất kỳ ký tự trích dẫn không kép nào, tiếp theo là một trích dẫn kép. Một cách khác để diễn đạt điều này là sử dụng đánh giá lười biếng như vậy

IndexOf1

Phần IndexOf2 sử dụng đánh giá lười biếng ("ngôi sao lười biếng") để khớp càng ít ký tự càng tốt. Ví dụ: nếu chúng ta có một chuỗi như vậy

IndexOf3

đánh giá IndexOf4 (hay còn gọi là tham lam) sẽ phù hợp

IndexOf5

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 IndexOf2 sẽ là IndexOf7 và kết quả khớp thứ hai là IndexOf8

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

people
people
people
6 đi kèm với hệ điều hành Linux. Lệnh
people
people
people
6 lọc nội dung trong một tệp hoặc dưới dạng đầu ra từ
people
people
people
8

Bà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

people
people
people
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ức

Bà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

$ grep -Po '@.*people' regex-content-01.html
0,
$ grep -Po '@.*people' regex-content-01.html
1 hoặc
$ grep -Po '@.*people' regex-content-01.html
2 hoặc các chữ số
$ grep -Po '@.*people' regex-content-01.html
3 hoặc
$ grep -Po '@.*people' regex-content-01.html
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áo

Siê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ụ

$ grep -Po '@.*people' regex-content-01.html
5 (dấu chấm) đại diện cho "bất kỳ ký tự nào" và ký tự phụ
$ grep -Po '@.*people' regex-content-01.html
6 đại diện cho bất kỳ chữ số nào

Chạ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 HTML

Trong 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

$ grep -Po '@.*people' regex-content-01.html
7



A list of interesting and uninteresting people




      

Interesting People

Uninteresting People

Định dạng để sử dụng grep đối với một tệp

Định dạng để sử dụng

people
people
people
6 đối với tệp HTML tại dòng lệnh như sau

$ grep -Po  

Các yếu tố của cú pháp như sau

  • people
    people
    people
    6 là tệp thực thi nhị phân
  • @uninterestingpeople
    @uninterestingpeople
    @uninterestingpeople
    0 chứa các tùy chọn được chuyển đến
    people
    people
    people
    6. Tùy chọn
    @uninterestingpeople
    @uninterestingpeople
    @uninterestingpeople
    2 diễn giải biểu thức chính quy dưới dạng biểu thức chính quy Perl. Tùy chọn
    @uninterestingpeople
    @uninterestingpeople
    @uninterestingpeople
    3 làm cho
    people
    people
    people
    6 chỉ xuất ra văn bản phù hợp, không phải toàn bộ dòng chứa nó
  • @uninterestingpeople
    @uninterestingpeople
    @uninterestingpeople
    5 là biểu thức chính quy để thực thi
  • @uninterestingpeople
    @uninterestingpeople
    @uninterestingpeople
    6 là vị trí của tệp mục tiêu trong hệ thống tệp của máy tính, chẳng hạn như
    @uninterestingpeople
    @uninterestingpeople
    @uninterestingpeople
    7. Nếu bạn cung cấp một tên tệp đơn giản mà không có đường dẫn, thì nó đề cập đến một tệp trong thư mục làm việc hiện tại

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ường

Ví 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

$ grep -Po '@.*people' regex-content-01.html
7. Trong trường hợp này, các ký tự thông thường từ chuỗi
@uninterestingpeople
@uninterestingpeople
@uninterestingpeople
9

$ grep -Po 'people' regex-content-01.html

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

@uninterestingpeople
@uninterestingpeople
@uninterestingpeople
9 trong tệp
$ grep -Po '@.*people' regex-content-01.html
7

đầu ra là

people
people
people

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ường

Ví 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

$ grep -Po '@.*people' regex-content-01.html
7

$ grep -Po '@.*people' regex-content-01.html

Logic mà biểu thức chính quy thực thi như sau. Trong tệp

$ grep -Po '@.*people' regex-content-01.html
7, khớp bất kỳ lần xuất hiện nào của ký tự thông thường
$ grep -Po '@.*people.*\.com' regex-content-01.html
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 (
$ grep -Po '@.*people.*\.com' regex-content-01.html
5) cho đến khi xuất hiện ký tự thông thường
@uninterestingpeople
@uninterestingpeople
@uninterestingpeople
9

đầu ra là

@uninterestingpeople
@uninterestingpeople
@uninterestingpeople

Một phiên bản mở rộng của ví dụ trước là

$ grep -Po '@.*people.*\.com' regex-content-01.html

Logic mà biểu thức chính quy thực thi như sau. Trong tệp

$ grep -Po '@.*people' regex-content-01.html
7, khớp bất kỳ lần xuất hiện nào của ký tự thông thường
$ grep -Po '@.*people.*\.com' regex-content-01.html
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 (
$ grep -Po '@.*people.*\.com' regex-content-01.html
5) cho đến khi xuất hiện ký tự thông thường
@uninterestingpeople
@uninterestingpeople
@uninterestingpeople
9. Sau đó, khớp bất kỳ ký tự nào bằng 0 hoặc nhiều lần (
$ grep -Po '@.*people.*\.com' regex-content-01.html
5) cho đến khi xuất hiện ký tự thông thường
@uninterestingpeople.com
@uninterestingpeople.com
@uninterestingpeople.com
2. Lưu ý rằng siêu ký tự thoát (
@uninterestingpeople.com
@uninterestingpeople.com
@uninterestingpeople.com
3) được sử dụng trước ký tự thông thường dấu chấm (
$ grep -Po '@.*people' regex-content-01.html
5) như vậy.
@uninterestingpeople.com
@uninterestingpeople.com
@uninterestingpeople.com
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 (
$ grep -Po '@.*people' regex-content-01.html
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à

@uninterestingpeople.com
@uninterestingpeople.com
@uninterestingpeople.com

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ường

Ví dụ sau minh họa cách chạy

people
people
people
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
@uninterestingpeople.com
@uninterestingpeople.com
@uninterestingpeople.com
8 khi chạy
people
people
people
6. Tùy chọn
@uninterestingpeople.com
@uninterestingpeople.com
@uninterestingpeople.com
8 biểu thị quá trình xử lý không phân biệt chữ hoa chữ thường

Trong 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

$ grep -Poi '.*mick jagger.*' regex-content-01.html
1 theo cách không phân biệt chữ hoa chữ thường

$ grep -Poi '.*mick jagger.*' regex-content-01.html

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 (

$ grep -Po '@.*people.*\.com' regex-content-01.html
5) cho đến khi các ký tự thông thường
$ grep -Poi '.*mick jagger.*' regex-content-01.html
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 (
$ grep -Po '@.*people.*\.com' regex-content-01.html
5)

Kết quả là như sau.  

  • Đối sánh các thực thể danh sách HTML

    Ví 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ẻ

    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    5 và kết thúc bằng thẻ
    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    6

    $ grep -Po  
    0

    Logic mà biểu thức chính quy thực thi như sau. Trong tệp

    $ grep -Po '@.*people' regex-content-01.html
    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
    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    5 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào (
    $ grep -Po '@.*people.*\.com' regex-content-01.html
    5), theo sau là các ký tự thông thường
    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    6

    đầu ra là

    $ grep -Po  
    1

    Khớ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ị ID

    Ví 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

    $ grep -Po  
    2

    Logic mà biểu thức chính quy thực thi như sau. Trong tệp

    $ grep -Po '@.*people' regex-content-01.html
    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 (
    $ grep -Po '@.*people.*\.com' regex-content-01.html
    5) sau đó được theo sau bởi các ký tự thông thường
    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    6

    đầu ra là

    $ grep -Po  
    3

    Làm việc với nhiều tệp HTML

    Cá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 đó
    $ grep -Po '@.*people' regex-content-01.html
    7

    $ grep -Po  
    4

    Các định dạng để sử dụng grep đối với nhiều tệp

    Định dạng để sử dụng

    people
    people
    people
    6 đối với nhiều tệp HTML tại dòng lệnh như sau

    $ grep -Po  
    5

    Các yếu tố của cú pháp như sau

    • people
      people
      people
      6 là tệp thực thi nhị phân
    • @uninterestingpeople
      @uninterestingpeople
      @uninterestingpeople
      0 chứa các tùy chọn được chuyển đến
      people
      people
      people
      6. Tùy chọn
      @uninterestingpeople
      @uninterestingpeople
      @uninterestingpeople
      2 diễn giải biểu thức chính quy dưới dạng biểu thức chính quy Perl. Tùy chọn
      @uninterestingpeople
      @uninterestingpeople
      @uninterestingpeople
      3 làm cho
      people
      people
      people
      6 chỉ xuất ra văn bản phù hợp, không phải toàn bộ dòng chứa nó
    • @uninterestingpeople
      @uninterestingpeople
      @uninterestingpeople
      5 là biểu thức chính quy để thực thi
    • $ grep -Po  
      09,
      $ grep -Po  
      10 và
      $ grep -Po  
      11 là các tệp mục tiêu khác nhau trong hệ thống tệp của máy tính

    Định dạng để sử dụng

    people
    people
    people
    6 với đặc tả tệp đối với nhiều tệp HTML như sau

    $ grep -Po  
    6

    $ grep -Po  
    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
    $ grep -Po  
    14

    $ grep -Po  
    7

    Khai báo sau tìm tất cả các tệp bắt đầu bằng ký tự

    $ grep -Po  
    15, tiếp theo là ký tự bất kỳ (
    $ grep -Po  
    16) và kết thúc bằng phần mở rộng
    $ grep -Po  
    14

    $ grep -Po  
    8

    Cá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 HTML

    Ví dụ sau khớp với tất cả các chuỗi ký tự thông thường

    $ grep -Po  
    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
    $ grep -Po  
    14

    $ grep -Po  
    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

    $ grep -Po  
    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
    $ grep -Po  
    14

    đầu ra là

    $ grep -Po 'people' regex-content-01.html
    0

    Khớ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ường

    Lệ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

    $ grep -Po 'people' regex-content-01.html
    1

    Logic 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

    $ grep -Po  
    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 (
    $ grep -Po '@.*people.*\.com' regex-content-01.html
    5), sau đó là các ký tự thông thường
    $ grep -Po  
    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

    $ grep -Po 'people' regex-content-01.html
    2

    Khớp các lần xuất hiện của các ký tự trong thẻ HTML trên nhiều tệp HTML

    Ví dụ sau đây tìm tất cả các ký tự giữa các thẻ HTML

    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    5 và
    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    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
    $ grep -Po  
    14

    $ grep -Po 'people' regex-content-01.html
    3

    Logic 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

    $ grep -Po  
    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
    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    5 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào (
    $ grep -Po '@.*people.*\.com' regex-content-01.html
    5), tiếp theo là các ký tự thông thường
    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    6

    đầu ra là

    $ grep -Po 'people' regex-content-01.html
    4

    Khớ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 HTML

    Lệnh sau tìm các thực thể

    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    5 chứa một chuỗi cụ thể,
    $ grep -Po  
    18

    $ grep -Po 'people' regex-content-01.html
    5

    Logic 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

    $ grep -Po  
    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
    $ grep -Poi '.*mick jagger.*' regex-content-01.html
    5 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào (
    $ grep -Po '@.*people.*\.com' regex-content-01.html
    5), sau đó là các ký tự thông thường Vịt,

    đầu ra là

    $ grep -Po 'people' regex-content-01.html
    6

    Làm việc trên nhiều dòng HTML

    Một trong những thiếu sót của lệnh

    people
    people
    people
    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

    $ grep -Po 'people' regex-content-01.html
    7

    Biểu thức chính quy sau đây trong lệnh

    people
    people
    people
    6 sẽ không khớp với nội dung
    $ grep -Po  
    43 trong đoạn mã trước, bởi vì
    people
    people
    people
    6 không khớp với các siêu ký tự ngắt dòng, chẳng hạn như
    $ grep -Po  
    45

    $ grep -Po 'people' regex-content-01.html
    8

    Cá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

    people
    people
    people
    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
    $ grep -Po  
    47

    Cài đặt pcre2grep

    Tệp thực thi

    $ grep -Po  
    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 định

    Chạy các lệnh sau để cài đặt

    $ grep -Po  
    47 trên máy tính chạy Red Hat Enterprise Linux, Fedora hoặc CentOS Stream

    $ grep -Po 'people' regex-content-01.html
    9

    Chạy các lệnh sau để cài đặt

    $ grep -Po  
    47 trên máy tính chạy Ubuntu hoặc hệ thống khác dựa trên Debian

    people
    people
    people
    0

    Khi bạn đã cài đặt

    $ grep -Po  
    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òng

    Ví dụ sau sử dụng

    $ grep -Po  
    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ẻ
    $ grep -Po  
    53 và
    $ grep -Po  
    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ại

    Ví dụ sử dụng các tùy chọn

    $ grep -Po  
    55 với
    $ grep -Po  
    47. Tùy chọn
    $ grep -Po  
    57 cho phép khớp trên nhiều dòng. Tùy chọn
    $ grep -Po  
    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ụ
    $ grep -Po  
    45 để biểu thị ngắt dòng

    people
    people
    people
    1

    Logic 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à

    $ grep -Po  
    14. Tìm kiếm nội dung tệp để khớp với các ký tự
    $ grep -Po  
    61 theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào (
    $ grep -Po '@.*people.*\.com' regex-content-01.html
    5) cho đến khi xuất hiện ký tự meta ngắt dòng (
    $ grep -Po  
    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 (
    $ grep -Po '@.*people.*\.com' regex-content-01.html
    5) cho đến khi xuất hiện các ký tự thông thường
    $ grep -Po  
    54

    đầu ra là

    people
    people
    people
    2

    Ví 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ẻ

    $ grep -Po  
    53 và
    $ grep -Po  
    54 bao gồm nhiều hơn hai dòng, như vậy

    people
    people
    people
    3

    Cách giải quyết vấn đề là sử dụng siêu ký tự (

    $ grep -Po  
    68) để biểu thức chính quy diễn giải ký tự dấu chấm (
    $ grep -Po '@.*people' regex-content-01.html
    5) để bao gồm ngắt dòng, như minh họa trong ví dụ tiếp theo

    Tì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ự (

    $ grep -Po  
    68) vào biểu thức chính quy để làm cho nó xử lý ký tự chấm (
    $ grep -Po '@.*people' regex-content-01.html
    5) để bao gồm các ngắt dòng dưới dạng "bất kỳ ký tự nào"

    people
    people
    people
    4

    Logic 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à

    $ grep -Po  
    14. Siêu ký tự đại diện "ký tự bất kỳ" (
    $ grep -Po '@.*people' regex-content-01.html
    5) có thể bao gồm ngắt dòng như được biểu thị bởi ký tự đại diện
    $ grep -Po  
    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
    $ grep -Po  
    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 (
    $ grep -Po  
    76), tiếp theo là một lần xuất hiện của các ký tự thông thường
    $ grep -Po  
    77

    đầu ra là

    people
    people
    people
    5

    Để tất cả chúng cùng nhau

    Lọ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

    people
    people
    people
    6 hoặc trên nhiều dòng văn bản bằng cách sử dụng
    $ grep -Po  
    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.