Hỏi cách tối ưu search pattern trong bài toán dùng regular expression

Chào mọi người, mình gặp một câu viết pattern lọc ra các phụ âm viết hoa (B - Z, không có chứa AEUOI). Mình viết một pattern có độ dài 19 ký tự như ở dưới và đã thỏa mãn yêu cầu đề bài. Tuy nhiên, thì như kết quả tốt nhất là chuỗi chứa 16 ký tự. (Your shortest solution thus far is 19 characters long. The overall shortest solution is 16 characters long.) Không biết là nên viết lại pattern này thế nào? Cảm ơn mọi người đã đọc.

/[^AEOUIa-z\W_\d]/g

Bạn thử regex này.
[^ -AEIOU[-ÿ] , 13 characters
/[^ -AEIOU[-ÿ]/g , with flag, 16 characters

4 Likes

Mình đọc trên regex101.com thì họ giải thích như ở dưới nên mình hiểu ý nghĩa của nó. Mình có tra google nhưng mà chưa thấy trang nào viết về ký tự này ÿ. Bạn gõ ký tự này trên bàn phím kiểu gì vậy? Mình có thể tìm đọc mấy ký tự như này ở trang nào? Mình biết mỗi trang regex101.com, đọc references của họ nhưng không thấy luôn. Cảm ơn bạn.

[-ÿ a single character in the range between [ (index 91) and ÿ (index 255) (case sensitive)

Thực ra nó là như thế này:
[-ÿ: match từ codepoint của kí tự [ đến codepoint của kí tự ÿ (Kí tự cuối cùng trong mã Latin-1)
-A: match từ codepoint của kí tự space đến codepoint của kí tự A
Ý nghĩa là để bỏ qua toàn bộ các kí tự khác trong bảng mã ASCII, ngoại trừ (B - Z, không có chứa AEUOI)
Ở đây ban vanhieu làm hơi vượt quá kì vọng của bài tập, họ chỉ cần mình làm việc trong giới hạn bảng mã ASCII thôi, cho nên thay vì viết là ÿthì nên viết là ~ (kí tự cuối cùng trong mã ASCII.

7 Likes

Cảm ơn bạn. Mình hiểu rồi.

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