Skip to main content Link Search Menu Expand Document (external link)

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

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:

string|preg_get(pattern)
string|preg_getAll(pattern)
string|preg_replace(pattern, replacement)

Ví dụ:

  • Anh A có một hàm được tạo bởi macro, như sau:
    {% macro str_upper(string) %}{% spaceless %}
    {{string|trim|upper}}
    {% endspaceless%}{% endmacro %}
  • 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:

{% from 'func_of_A' import str_upper %}
{% set string = '[upper]Hoàng Thị B[/upper]' %}
{% set pattern = '/\\[upper\\](.*?)\\[\\/upper\\]/' %}
{% set replacement = string|preg_getAll(pattern)|first|replace({'[/upper]':'','[upper]':''}) %}
{{ string|preg_replace(pattern, str_upper(replacement))|raw }}

Chia sẻ



QRcode
QRcode