VBScript.RegExp sẽ bị xóa khỏi Windows: thư viện Pcre2 giải pháp thay thế tối ưu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,790
Được thích
4,471
Giới tính
Nam
Do microsoft đã dần loại bỏ thư viện Scripting khỏi Windows trong các phiên bản mới nhất, làm khó khăn hơn cho các bạn muốn lập trình trong VBA.
Giờ đây các bạn muốn tận dụng thư viện này để khởi tạo lớp Biểu thức chính quy VBScript.RegExp thì sẽ gặp thông báo lỗi, thư viện không hoạt động trong Runtime hoặc thông báo lỗi không thể chạy.




Thư viện Pcre2 giải pháp thay thế tối ưu, với mã nguồn được viết với ngôn ngữ C, tận dụng đa luồng để xử lý chuỗi, giải thuật tối ưu do được nhiều lập trình viên cộng đồng đóng góp, tốc độ tối ưu, hỗ trợ nhiều cú pháp mới nhất dành cho biểu thức chính quy.
Tuy nhiên khi lập trình với thư viện ngoài cần có các tệp DLL, và nhúng Dll vào các dự án Office. Đòi hỏi các hiểu biết về lập trình Win API.
Hôm nay dựa vào Repo VBPcre2 trên Github tôi viết lại bản tương thích cả 32 và 64 bit để có thể hoạt động trên nhiều nền tảng nhiều phiên bản Office.
Nếu các bạn đang viết mã trên IDE mới là TwinBasic, cũng có thể tận dụng lại mã nguồn từ tệp bên dưới.

Với tệp Dll có hai dạng được Export từ mã nguồn cho hai cách gọi là __stdcall và __cdeclcall
Với mã nguồn bên dưới, có thể tận dụng cả hai cách đóng gói, tùy theo cách bạn muốn sử dụng.

Với cú pháp của thư viện có một chút khác so với thư viện cũ, tất cả có trong các lớp trong tệp, các bạn có thể sửa lại mã nguồn để đạt được mong muốn tái sử dụng lại cú pháp của thư viện cũ.

Mã trong tệp được cải tiến sang tương thích 64 bit dựa vào mã nguồn VBPcre2 chỉ hỗ trợ 32bit dành cho VB6 tại:

Dưới đây là tệp phiên bản đầu tiên, sẽ có các bản cập nhật mới trong tương lai


Nếu các bạn đang sử dụng Excel 365, hãy thử hai đoạn mã dưới đây trong VBA.

Lỗi Runtime thông báo lỗi khi sử dụng thư viện cũ:

1758093802105.png


Đoạn mã này sử dụng RegExp đã được Microsoft nhúng trực tiếp vào trong VBA sẽ chạy lỗi trên Office 365:
(Khi chạy thử đoạn mã này gây Crash ứng dụng Excel)

JavaScript:
Sub VBA_365_RegExp_test()
  ' RegExp in Office 365
  With New RegExp
    .Global = True
    .IgnoreCase = True
    .MultiLine = True
    .pattern = "(.)(?=.*\1)"
    Debug.Print .test("ss")
  End With
End Sub

Đoạn mã này sử dụng VBScript.RegExp đã được Microsoft cập nhật chạy lỗi:
JavaScript:
Sub VBA_VBScript_Regex_test()
  With Interaction.CreateObject("VBScript.RegExp")
    .Global = True
    .IgnoreCase = True
    .MultiLine = True
    .pattern = "(.)(?=.*\1)"
    Debug.Print .test("ss")
  End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Mới vừa đăng bài thì ChatGPT đã cập nhật thông tin cho Copilot, vô tình hỏi thông tin về Pcre2 thì nó gợi ý chính bài viết này


1758099830596.png
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom