Tôi đang cố viết biểu thức chính quy để chia chuỗi thành các phần tử riêng biệt bên trong các dấu ngoặc nhọn phù hợp. Trước hết, nó cần phải được đệ quy, và thứ hai tắt, nó phải trả về bù đắp (như với PREG_OFFSET_CAPTURE
).Viết biểu thức để trích xuất dữ liệu theo cách đệ quy giữa dấu ngoặc đơn
Tôi thực sự nghĩ rằng đây có lẽ là một cách ít hiệu quả để xử lý dữ liệu này, nhưng tôi không chắc chắn về một kỹ thuật điều khiển hiệu suất dễ dàng hơn. (Nếu bạn đã có một, tôi rất thích nghe nó!)
Vì vậy, đầu vào có thể được định dạng này:
Hello {#name}! I'm a {%string|sentence|bit of {#random} text}
Chế biến các dữ liệu là đủ dễ dàng nếu nó ở định dạng này :
Hello {#name}! I'm a {%string|sentence|bit of random text}
Nhưng đó là dấu ngoặc nhọn đệ quy trong một bộ dấu ngoặc nhọn khác là vấn đề khi xử lý. Tôi đang sử dụng đoạn mã sau để tách chuỗi:
preg_match_all("/(?<={)[^}]*(?=})/m", $string, $braces, PREG_OFFSET_CAPTURE);
Và như đã đề cập ở trên, nó rất đẹp cho hình thức đơn giản. Chỉ cần ít hơn cho các hình thức phức tạp hơn. Ý định cho điều này (và tôi có chức năng trong một hình thức không đệ quy) là thay thế từng khu vực được ngoặc đơn với nội dung được xử lý bởi các hàm, làm việc trở lên.
Lý tưởng nhất, tôi muốn có thể viết Hello {#name}! I'm a {%string|sentence|bit of {?(random == "strange") ? {#random} : "strange"}} text}
và để có thể quản lý được.
Mọi trợ giúp sẽ được đánh giá rất nhiều.
Vì vậy, cho 'Xin chào {} #name! Tôi là một {% string | câu | bit của {#random} text} ', bạn cần phải nắm bắt' {#name} ',' {% string | câu | bit của {#random} text} ', và' {#random} '? –
Chính xác. Và tôi cũng cần nắm bắt vị trí lý tưởng! Mặc dù tôi vẫn nghĩ rằng có một cách tốt hơn để làm điều này, điều này mất một thời gian trong các chuỗi rất dài. – Forest
Nếu mục tiêu của bạn là thay thế mỗi dấu ngoặc đơn, sử dụng mẫu đệ quy sẽ không hữu ích. Những gì bạn cần là thay thế dấu ngoặc đơn trong cùng cho đến khi không còn dấu ngoặc đơn nào trong chuỗi của bạn. –