[英]why this regex is not working on java 7?
根據如何確定字符是否是Java中的字母的答案? 我正在使用下面的代碼片段來匹配if string是否包含unicode字母。 它在java 6上工作得很好,其中unicode字符\\ u0374未被視為unicode lettter
boolean test = "\u0374100".matches("[\\p{L}].*");; returns true on java 7 whereas it return false java 6.
關於這個觀點,java 7有沒有變化? 如果是的話如何讓java 6的東西在java 7上運行?
根據Fileformat.Info:Unicode字符'GREEK NUMERAL SIGN'(U + 0374) ,類別為“ Letter ,Modifier [Lm]”。 它還說Character.isLetter()
的結果是Yes 。
現在將其與Unicode字符'GREEK LOWER NUMERAL SIGN'(U + 0375)進行對比,后者具有“ Symbol ,Modifier [Sk]”類別。 根據頁面, Character.isLetter()
的結果為No。
Java 7根據Java SE 7中的Character javadoc和Internationalization Enhancements使用Unicode 6.0.0,而Java 6使用Unicode 4.0(參見Character javadoc和Java Language Specification 5.0 (適用於Java 5和6))。
原因是unicode現在將U + 0374定義為“Letter,Modifier”。 查看Unicode 4.0.0和Unicode 6.0.0的unicode數據庫,很明顯定義從Sk更改為Lm :
版本4.0:
0374;希臘數字標志; Sk ; 0; ON; 02B9 ;;;; N; GREEK UPPER NUMERAL SIGN; Dexia keraia ;;;
版本6.0.0:
0374;希臘數字標志; Lm ; 0; ON; 02B9 ;;;; N; GREEK UPPER NUMERAL SIGN ;;;;
換句話說:你的正則表達式工作正常,只是字符定義已經改變,所以它現在被認為是一個字母,而不是一個符號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.