Nếu tôi muốn sử dụng biểu thức chính quy của C++ 11 với chuỗi unicode, chúng có hoạt động với char * như UTF-8 hay tôi phải chuyển đổi chúng thành chuỗi wchar_t *?Do C++ 11 biểu thức chính quy có hoạt động với chuỗi UTF-8 không?
Trả lời
Bạn cần kiểm tra trình biên dịch và hệ thống bạn đang sử dụng, nhưng trên lý thuyết, nó sẽ được hỗ trợ nếu hệ thống của bạn có ngôn ngữ UTF-8. Bài kiểm tra sau đây trả về đúng cho tôi trên Clang/OS X.
bool test_unicode()
{
std::locale old;
std::locale::global(std::locale("en_US.UTF-8"));
std::regex pattern("[[:alpha:]]+", std::regex_constants::extended);
bool result = std::regex_match(std::string("abcdéfg"), pattern);
std::locale::global(old);
return result;
}
LƯU Ý: Điều này được biên soạn trong một tệp UTF-8 được mã hóa.
Để an toàn, tôi cũng đã sử dụng chuỗi có các phiên bản hex rõ ràng. Nó cũng làm việc.
bool test_unicode2()
{
std::locale old;
std::locale::global(std::locale("en_US.UTF-8"));
std::regex pattern("[[:alpha:]]+", std::regex_constants::extended);
bool result = std::regex_match(std::string("abcd\xC3\xA9""fg"), pattern);
std::locale::global(old);
return result;
}
Cập nhậttest_unicode()
vẫn làm việc cho tôi
$ file regex-test.cpp
regex-test.cpp: UTF-8 Unicode c program text
$ g++ --version
Configured with: --prefix=/Applications/Xcode-8.2.1.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode-8.2.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Bạn không cần phải lưu mã nguồn bằng UTF-8 nếu bạn sử dụng 'u8" abcdéfg "'. –
Miền địa phương có quan trọng không? Nếu bạn bỏ qua ngôn ngữ ở tất cả? – Viet
@Viet Luôn có một miền địa phương. Nếu bạn không thiết lập một cách rõ ràng miền địa phương bạn cần, thì regex sẽ xử lý với miền địa phương đã có từ trước. Tôi sẽ không mong đợi regex làm việc với các chuỗi UTF-8 nếu ngôn ngữ không tương thích với UTF-8. –
C++ 11 cụm từ thông dụng sẽ "làm việc với" UTF-8 tốt, với định nghĩa tối thiểu là "công việc". Nếu bạn muốn hỗ trợ biểu thức chính quy Unicode "hoàn thành" cho các chuỗi UTF-8, bạn sẽ tốt hơn với một thư viện hỗ trợ trực tiếp như http://www.pcre.org/.
Hoặc [Boost.Regex] (http://www.boost.org/libs/regex/). – ildjarn
@ildjarn: ... cần hỗ trợ [ICU] (http://site.icu-project.org/) được biên soạn, rất tiếc không phải là quy tắc trên tất cả các nền tảng và có thể hoàn toàn ab **** bắt đầu làm. ICU, tuy nhiên, có hỗ trợ RegEx của riêng mình ... – DevSolar
Có họ sẽ, điều này là do thiết kế của bảng mã UTF-8. Các hoạt động chuỗi con nên hoạt động chính xác nếu chuỗi được coi là một mảng các byte chứ không phải là một mảng các điểm mã.
Xem Câu hỏi thường gặp # 18 tại đây: http://www.utf8everywhere.org/#faq.validation về cách điều này đạt được trong thiết kế mã hóa này.
Kết hợp Regex không phải là "hoạt động chuỗi con". –
- 1. mới biểu thức chính quy không hoạt động
- 2. Biểu thức chính quy trước không hợp lệ do sed
- 3. Không thể nhận biểu thức chính quy hoạt động chính xác với nhiều dòng
- 4. Biểu thức chính quy JavaScript
- 5. Biểu thức chính quy Javascript khớp với hai chuỗi
- 6. Clojure multiline biểu thức chính quy
- 7. Tại sao nhóm "không bắt giữ" biểu thức chính quy không hoạt động
- 8. Biểu thức chính quy của Python không khớp với
- 9. Phép nhân với các biểu thức chính quy .NET
- 10. Biểu thức chính quy Javascript - chuỗi để đối tượng RegEx
- 11. Tại sao C++ 11 hỗ trợ 6 ngữ pháp biểu thức chính quy khác nhau?
- 12. Biểu thức chính quy không tuân thủ
- 13. biểu thức chính quy không có ký tự
- 14. Biểu thức chính quy tiêu cực lookahead
- 15. Tại sao không có tiêu chuẩn biểu thức chính quy?
- 16. .match() với biểu thức chính quy trả về null
- 17. Biểu thức chính quy của Python với mã số
- 18. Hạn chế của Biểu thức chính quy?
- 19. Biểu thức chính quy Javascript Xóa không gian
- 20. biểu thức chính quy lookbehind javascript
- 21. Perl chia và biểu thức chính quy
- 22. Biểu thức chính quy nhiều dòng trong C#
- 23. Biểu thức chính quy của Python
- 24. chuỗi không tham lam biểu thức chính quy phù hợp với
- 25. Biểu thức chính quy kết thúc
- 26. Quy tắc biểu thức chính quy trong Outlook 2007?
- 27. thử nghiệm tên tập tin với biểu thức chính quy
- 28. Biểu thức chính quy để tìm các không gian
- 29. Bạn có thể cải thiện mã biểu thức chính quy C# này không?
- 30. tách một chuỗi có thoát khỏi chuỗi sử dụng biểu thức chính quy trong Java
Tôi có phát hiện nhầm lẫn về các điểm mã Unicode/mã và các lược đồ mã hóa Unicode ở đây không? –
http://icu-project.org/apiref/icu4c/classUnicodeString.html –