Loại trừ thẻ HTML regex

Hôm nọ tôi thấy một câu hỏi đơn giản nhưng thú vị trên internet. Ai đó đã đăng muốn biết. “Làm cách nào để xóa các thẻ HTML trong C?”

Tôi nhanh chóng nghĩ đến RegEx, nhưng với C++

Nếu bạn hiểu Biểu thức chính quy với C ++ thì thực sự rất dễ dàng, chỉ cần

  • Bao gồm tiêu đề
    #include 
    #include 
    
    int main(){
      regex_t regex;
      int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
    
      check_regex = regexec(&regex, "

    Tag

    "
    , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
    8;
  • Thông báo mẫu của biểu thức chính quy;
  • Và cuối cùng dùng hàm
    #include 
    #include 
    
    int main(){
      regex_t regex;
      int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
    
      check_regex = regexec(&regex, "

    Tag

    "
    , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
    9 để thay thế bằng chuỗi bạn muốn

Tóm lại code là thế này

#include 
#include 

int main(){
  std::string html = "\"https://terminalroot.com/\">This is a link";
  std::regex tags("<[^>]*>");
  std::string remove{};
  std::cout << std::regex_replace(html, tags, remove) << '\n';
  return 0;
}

đầu ra có thể xảy ra.

man regex.h
0

Nhưng trong Linguagem C mọi thứ thực sự không dễ dàng như vậy


Ngôn ngữ C

Bạn có thể sử dụng

man regex.h
1 trong C, nhưng nó sẽ chỉ kiểm tra các mẫu, còn việc thay thế sẽ tùy thuộc vào bạn

Ví dụ: kiểm tra xem một chuỗi đã cho có thẻ trong đó hay không, chúng ta có thể sử dụng nó như thế này

#include 
#include 

int main(){
  regex_t regex;
  int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);

  check_regex = regexec(&regex, "

Tag

"
, 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }

đầu ra có khả năng.

man regex.h
2

Để biết thêm thông tin, hãy truy cập trang POSIX của sách hướng dẫn bằng lệnh

man regex.h

Xóa THẺ HTML trong C

Sau khi bạn kiểm tra xem một chuỗi đã cho có thẻ hay không (lưu xử lý), bước tiếp theo là xóa thẻ

Tôi đã nghĩ ra một giải pháp của riêng mình (và đơn giản 💡 ) mà những người yêu thích C có thể phản đối, nhưng nó hiệu quả 😎. Bản thân mã là

  • Bao gồm tiêu đề
    • man regex.h
      3 để sử dụng
      #include 
      #include 
      
      int main(){
        regex_t regex;
        int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
      
        check_regex = regexec(&regex, "

      Tag

      "
      , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
      0;
    • #include 
      #include 
      
      int main(){
        regex_t regex;
        int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
      
        check_regex = regexec(&regex, "

      Tag

      "
      , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
      1 để sử dụng
      #include 
      #include 
      
      int main(){
        regex_t regex;
        int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
      
        check_regex = regexec(&regex, "

      Tag

      "
      , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
      2;
    • #include 
      #include 
      
      int main(){
        regex_t regex;
        int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
      
        check_regex = regexec(&regex, "

      Tag

      "
      , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
      3 để sử dụng loại
      #include 
      #include 
      
      int main(){
        regex_t regex;
        int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
      
        check_regex = regexec(&regex, "

      Tag

      "
      , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
      4
  • Xác định hằng số
    #include 
    #include 
    
    int main(){
      regex_t regex;
      int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
    
      check_regex = regexec(&regex, "

    Tag

    "
    , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
    5 để tối ưu hóa hiệu suất
  • Tạo hàm trả về
    #include 
    #include 
    
    int main(){
      regex_t regex;
      int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
    
      check_regex = regexec(&regex, "

    Tag

    "
    , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
    6 để xác định lại. Và chức năng đó như sau
    • Tôi đã chèn một vòng lặp
      #include 
      #include 
      
      int main(){
        regex_t regex;
        int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
      
        check_regex = regexec(&regex, "

      Tag

      "
      , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
      7 để đi qua chuỗi theo số lượng ký tự trong đó;
    • Nó kiểm tra xem ký tự mở của thẻ
      #include 
      #include 
      
      int main(){
        regex_t regex;
        int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
      
        check_regex = regexec(&regex, "

      Tag

      "
      , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
      8 có được xác định trong chuỗi hay không;
    • Nếu có, nó biến biến boolean
      #include 
      #include 
      
      int main(){
        regex_t regex;
        int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);
      
        check_regex = regexec(&regex, "

      Tag

      "
      , 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
      9 thành
      man regex.h
      0
    • Sau đó nối ký tự thành một đầu ra tạm thời có cùng kích thước.
      man regex.h
      1
    • Và để tiếp tục thêm chúng ta đổi thành
      man regex.h
      2 chỉ sau khi xác định ký tự thẻ đóng
      man regex.h
      3

Mã cuối cùng là

#include 
#include 

int main(){
  regex_t regex;
  int check_regex = regcomp(&regex, "<[^>]*>", REG_EXTENDED);

  check_regex = regexec(&regex, "

Tag

"
, 0, NULL, 0); !check_regex ? printf("Has tags!\n") : printf("It has no tags.\n"); regfree(&regex); return 0; }
7

đầu ra có thể xảy ra.

man regex.h
0

Điều đúng đắn là phân bổ không gian trên heap, bởi vì một chuỗi chứa tài liệu HTML có thể rất lớn. Nhưng đối với các mục đích giáo khoa và để hiểu logic, nó có kích thước tốt

Làm cách nào để loại trừ các thẻ HTML trong regex?

Dưới đây là biểu thức chính quy đơn giản để xác thực chuỗi theo mẫu thẻ HTML. Điều này sau này có thể được sử dụng để xóa tất cả các thẻ và chỉ để lại văn bản. / Thử đi.

Làm cách nào để xóa thẻ HTML khỏi chuỗi bằng regex trong Java?

Có thể xóa các thẻ HTML khỏi một chuỗi đã cho bằng cách sử dụng phương thức replaceAll() của lớp Chuỗi . Chúng tôi có thể xóa các thẻ HTML khỏi một chuỗi nhất định bằng cách sử dụng biểu thức chính quy. Sau khi xóa các thẻ HTML khỏi một chuỗi, nó sẽ trả về một chuỗi dưới dạng văn bản bình thường.

Làm cách nào để xóa thẻ HTML bằng regex Python?

Mã trên hoạt động như thế nào? .
Ban đầu, chúng tôi nhập mô-đun regex trong python có tên 're'
Sau đó, chúng tôi sử dụng lại. compile() chức năng của mô-đun regex. .
'. *' có nghĩa là không hoặc nhiều hơn 0 ký tự. .
Sau đó, chúng tôi sử dụng lại. .
Cuối cùng, chúng tôi gọi hàm remove_html để xóa các thẻ HTML khỏi chuỗi đầu vào

Làm cách nào để xác thực thẻ HTML bằng cụm từ thông dụng?

Thẻ HTML hợp lệ phải đáp ứng các điều kiện sau. .
Nó phải bắt đầu bằng thẻ mở (<)
Nó phải được theo sau bởi một chuỗi dấu ngoặc kép hoặc chuỗi dấu ngoặc đơn
Không cho phép một chuỗi dấu ngoặc kép, một chuỗi dấu nháy đơn hoặc thẻ đóng (>) không có dấu nháy đơn hoặc kép đi kèm