Java中的模式CANON_EQ字段和示例
仅当两个字符规范相等时,Pattern类的CANON_EQ字段才匹配两个字符。当将此值用作compile()
方法的标志值时,两个字符将被匹配,且仅当它们的完全规范分解相等时才匹配。
规范分解是Unicode文本规范化形式之一
例子1
import java.util.regex.Matcher; import java.util.regex.Pattern; public class CANON_EQ_Example { public static void main( String args[] ) { String regex = "b\u0307"; //编译正则表达式 Pattern pattern = Pattern.compile(regex, Pattern.CANON_EQ); //检索匹配器对象 Matcher matcher = pattern.matcher("\u1E03"); if(matcher.matches()) { System.out.println("Match found"); } else { System.out.println("Match not found"); } } }
输出结果
Match found
例子2
import java.util.regex.Matcher; import java.util.regex.Pattern; public class CANON_EQ_Example { public static void main( String args[] ) { String regex = "a\u030A"; //编译正则表达式 Pattern pattern = Pattern.compile(regex, Pattern.CANON_EQ); //检索匹配器对象 String [] input = {"\u00E5", "a\u0311", "a\u0325", "a\u030A", "a\u1E03", "a\uFB03" }; for (String ele : input) { Matcher matcher = pattern.matcher(ele); if(matcher.matches()) { System.out.println(ele+" is a match for "+regex); } else { System.out.println(ele+" is not a match for "+regex); } } } }
输出结果
å is a match for a? a? is not a match for a? a? is not a match for a? a? is a match for a? a? is not a match for a? a? is not a match for a?