Lọc lấy chuỗi nằm trong dấu nháy đơn nhưng không nằm trong dấu ngoặc nhọn

Em đang tạo một biểu thức chính quy để lọc tất cả các kí tự nằm trong cặp dấu nháy, nhưng không ở trong cặp dấu ngoặc nhọn.
vd:

{xin chao, day la xau 'daynhauhoc'} va day la xau 'bieuthucchinhquy' cua toi.

sau khi lọc sẽ cho ra:

bieuthucchinhquy

(mặc dù daynhauhoc cũng nằm trong cặp dấu nháy, nhưng nó lại ở trong cặp dấu ngoặc nhọn cho nên không hợp lệ.)
Mong các anh chị giúp đỡ em với ạ, em cám ơn nhiều…

Sao không tìm hết các chuỗi nằm trong {} rồi xóa hết đi, sau đó mới tìm chuỗi nằm trong ''

1 Like

Không anh ơi, chỉ lọc ra chứ không xóa và chuổi này có thể rất là dài…

Lọc là lấy ra đúng không? Mục đích của mình là lấy ra, tạo một bản copy của cái chuỗi đó rồi xóa dần cái không cần để lấy cái mình cần.

Dài thì có liên quan gì?

Vì rất dài cho nên sợ không đủ thời gian anh ạ!

Rất dài là cỡ nào? Vài GB text không? Regular expression phức tạp nó chạy cũng lâu nữa.

1 Like

Thế này anh ạ, mục đích chính của em khi lọc ra là để cho nó có màu khác thôi, giống như là Highlight Code ấy. Và nó phải tự động thay đổi khi nội dung thay đổi, nội dung này ở trên RichTextBox.

1 Like

‘\w+’(?![^{]*})

'\w+'        # lấy chuỗi nằm trong dấu ''
    (?!      # Nếu không dính với phần tiếp theo [1]
     [^{]*}  # Không bắt đầu bằng { và không kết thúc bằng }
    )         # Kết thúc [1]

http://regexstorm.net/tester

Chạy được trên ví dụ đơn giản nhưng phức tạp thì có thể có lỗi đối với ví dụ phức tạp.

Nhớ là: nếu bạn có một vấn đề, bạn dùng regular expression, bạn có 2 vấn đề.

4 Likes

Like anh Đạt, hay thật!!

Biểu thức này bị lỗi với:

xin chao, day la xau '{daynhauhoc'} va day la xau 'bieuthucchinhquy' cua toi.

Cái này còn tùy thuộc vào nhu cầu của tinh năng có muốn highlight luôn các ký tự đặc biệt đặt trong '' hay không, mà có nữa thì phức tạp à :worried:

\w+ chỉ lấy chữ, số và dấu gạch chân

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?