Regex Sublime Text không phát hiện thẻ multiline


129

Tôi có regex này ở đây;

\[sometag\](.*)\[/sometag\]

Mà được cho là bắt văn bản được bao quanh bởi các [sometag]thẻ. Nó hoạt động cho thông tin dòng đơn có trong các thẻ này, như trên chuỗi [sometag]this is a bit of text[/sometag]. Nhưng nó không hoạt động trên văn bản kéo dài nhiều dòng, như thế này;

[sometag] here is more text

it spans more than one line [/sometag]

Vì một số lý do, công cụ tìm regex của văn bản Sublime sẽ không nhận ra các thẻ trên nhiều dòng. Tôi muốn biết liệu đây có phải là sự cố với Sublime Text, tùy chọn có thể bật hay chỉ là sự bất tài cá nhân của tôi với biểu thức chính quy.

Câu trả lời:


239

Khi bắt đầu, sử dụng một công cụ sửa đổi dotall (?s)để tạo dấu chấm để khớp với các ký tự dòng mới.

(?s)\[sometag\](.*?)\[\/sometag\]

BẢN GIỚI THIỆU


Cảm ơn! Tại sao tôi phải bao gồm những dấu hỏi thêm đó?
Maurdekye

8
?sau *sẽ làm một trận đấu không tham lam. Hãy xem xét [b]foo[/b]foo[b]bar[/b]như ví dụ. \[b\].*\[\/b\]sẽ khớp toàn bộ từ đầu b đến cuối b.
Avinash Raj

chỉ cần chơi với việc thêm và xóa ?trong regex101.com/r/gI0xC3/2
Avinash Raj

11
(? s) khiến dấu chấm cũng bao gồm các dòng mới
cmroanirgo

3
dấu hỏi sau dấu hoa thị rất quan trọng vì nó xác định trận đấu là không tham lam.
andrej

12

Nếu sửa đổi chế độ của dấu chấm là không thể chấp nhận được vì một số lý do, bạn có thể lấy điều đó:

[sometag](.|\n)+?[/sometag]

3
Không bao giờ sử dụng (.|\n)+?nếu bạn có quyền truy cập vào công cụ sửa đổi DOTALL. Nếu bạn không thể sử dụng (?s)trong một số falvor, hãy sử dụng [\s\S]/ [\d\D]/ [\w\W], nhưng không phải là mẫu thay thế được đề xuất ở đây. Mô hình này rất kém hiệu quả và có thể dễ dàng dẫn đến một vấn đề thời gian chờ.
Wiktor Stribiż

1
@ WiktorStribiżew: Bạn có thể giải thích tại sao nó không hiệu quả? Tôi luôn luôn sử dụng [\s\S], nhưng trong nháy mắt (.|\n)sẽ có vẻ tương đương? Là nó để làm với các nhóm phù hợp? Nhưng sau đó (?:.|\n)sẽ như thế nào?
Cerberus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.