簡體   English   中英

為什么這個正則表達式不適用於java 7?

[英]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 javadocInternationalization Enhancements使用Unicode 6.0.0,而Java 6使用Unicode 4.0(參見Character javadocJava Language Specification 5.0 (適用於Java 5和6))。

原因是unicode現在將U + 0374定義為“Letter,Modifier”。 查看Unicode 4.0.0Unicode 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM