2012-06-19 37 views
5

thể trùng lặp:
PHP Warning: mb_ereg_match(): mbregex compile err: premature end of char-classRegular Expressions trong PHP: Kết hợp với UTS18 chuẩn

Unicode Common Locale liệu Repository (CLDR) có rất nhiều thông tin về mối quan hệ giữa các ngôn ngữ và ký tự. Ví dụ, bạn có thể xác định các ký tự nào được sử dụng trong một ngôn ngữ cụ thể bằng cách xem biểu đồ misc.exemplarCharacters. Dữ liệu thô cho các biểu đồ này được lưu trữ dưới dạng tệp XML và các ký tự mẫu được lưu trữ dưới dạng cụm từ thông dụng theo tiêu chuẩn Biểu thức chính quy Unicode UTS18.

Dưới đây là một vài ví dụ về những gì biểu UTS18 regex trông giống như:

1. [a à b c ç d e é è f g h i í ï j k l ŀ m n o ó ò p q r s t u ú ü v w x y z] 
2. [অ আ ই ঈ উ ঊ ঋ এ ঐ ও ঔ ং \u0981 ঃ ক খ গ ঘ ঙ চ ছ জ ঝ ঞ ট ঠ ড {ড\u09BC}ড় ঢ {ঢ\u09BC}ঢ় ণ ত থ দ ধ ন প ফ ব ভ ম য {য\u09BC} ৰ ল ৱ শ ষ স হ া ি ী \u09C1 \u09C2 \u09C3 ে ৈ ো ৌ \u09CD] 
3. [a á b ɓ c d ɗ e é ɛ {ɛ\u0301} f g i í j k l m n {ny} ŋ o ó ɔ {ɔ\u0301} p r s t u ú ū w y] 

Tôi đang sử dụng PHP và SimpleXML để phân tích các dữ liệu XML và cô lập những chuỗi regex. Bây giờ, tôi muốn kết hợp các ký tự nhiều byte riêng lẻ với các cụm từ thông dụng này. Tôi hiện đang sử dụng mb_ereg_match chức năng, trong đó sản lượng một hoặc nhiều những cảnh báo sau (tùy thuộc vào regex):

mbregex compile err: premature end of char-class in ... 
mbregex compile err: empty range in char class in ... 
mbregex compile err: empty char-class in ... 

Bất kỳ ý tưởng là tại sao điều này là không làm việc?

+0

Do U đặt mb_internal_encoding và mb_regex_encoding? Xin vui lòng hiển thị mã Ur nơi U sử dụng mb_ereg_match – Sergey

+0

"Có thể trùng lặp" [PHP Cảnh báo: mb_ereg_match(): mbregex biên dịch err: kết thúc sớm của lớp học char] (http://stackoverflow.com/questions/11094518/php-warning- mb-ereg-match-mbregex-compile-err-premature-end-of-char-class) là một bài đăng đã bị xóa, do đó, mở lại câu hỏi này. –

Trả lời

2

Theo đề nghị của Sergey, tôi đã thêm các dòng sau trước khi gọi các mb_ereg_match() chức năng:

mb_internal_encoding('UTF-8'); 
mb_regex_encoding('UTF-8'); 

Ngoài này loại bỏ hai trong số những cảnh báo nêu trên. Tôi chỉ còn lại với cảnh báo sau:

mbregex compile err: empty char-class in ... 

Sau khi một số gỡ lỗi bổ sung, tôi phát hiện thấy một số tệp XML CLDR thực tế chứa chuỗi biểu thức chính quy trống. Ví dụ, trong kn.xml chúng tôi có các dòng sau:

<exemplarCharacters type="auxiliary">[]</exemplarCharacters> 

Tôi tin rằng những dòng này là sai lầm, như hành vi dự kiến ​​sẽ chỉ đơn giản là rời khỏi dây chuyền ra hoàn toàn (mà chủ yếu là trường hợp trong suốt CLDR).

Vì vậy, tôi đã có thể loại bỏ lỗi cuối cùng này bằng cách đơn giản ném ra các chuỗi regex rỗng.

Hy vọng điều này sẽ giúp người khác!

Các vấn đề liên quan