Quên mật khẩu
 Đăng ký
Xem: 85|Trả lời: 0

Hướng dẫn sử dụng regex theo callback

[Lấy địa chỉ]

36

Chủ đề

7

Bài viết

172

Điểm

Administrator

Điểm
172
Đăng lúc 2024-9-6 20:12:39 | Xem tất |Chế độ đọc
Thật đáng tiếc khi SMM không hỗ trợ replace callback, nhưng nhiều người dùng vẫn muốn tìm cách sử dụng replace callback với regex. Bài viết này sẽ có thể là một gợi ý nho nhỏ để thực hiện điều đó.

Thay vì phải sử dụng quá nhiều hàm phân tích chuỗi thành mảnh (split) thì các bạn chỉ cần sử dụng các hàm dưới dạng filter như sau:
  1. string|preg_get(pattern)
  2. string|preg_getAll(pattern)
  3. string|preg_replace(pattern, replacement)
Sao chép mã


Ví dụ:
- Anh A có một hàm được tạo bởi macro, như sau:
  1. {% macro str_upper(string) %}{% spaceless %}
  2.     {{string|trim|upper}}
  3. {% endspaceless%}{% endmacro %}
Sao chép mã


- Chị B muốn sử dụng hàm trên cho preg_replace nhưng hệ thống mà chị B đang sử dụng thì đã quá lạc hậu và không hỗ trợ callback sẵn. Anh A đã giới thiệu anh preg_getpreg_getAll cho chị B để xứ lý vấn đề này, và chị B đã chọn anh preg_getAll vì anh còn lại bị yếu sinh lý.

Vấn đề của chị B đã được giải quyết, kết quả cuối cùng như sau:
  1. {% from 'func_of_A' import str_upper %}
  2. {% set string = '[upper]Hoàng Thị B[/upper]' %}
  3. {% set pattern = '/\\[upper\\](.*?)\\[\\/upper\\]/' %}
  4. {% set replacement = string|preg_getAll(pattern)|first|replace({'[/upper]':'','[upper]':''}) %}
  5. {{ string|preg_replace(pattern, str_upper(replacement))|raw }}
Sao chép mã
Bạn phải đăng nhập mới được đăng bài Đăng nhập | Đăng ký

Quy tắc điểm

Lưu trữ|Danh sách ban|Diễn đàn Sắc màu

GMT+7, 2024-11-21 16:20 , Processed in 0.058896 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

Trả lời nhanh Lên trên Trở lại danh sách