발음 구별 기호와 일치시키려는 이름의 정규식이 있습니다. 여기에 내 코드에서 로깅 조각은 test.java:191로 시작됩니다 : I 입력 "ü"를 사용할 때 여기 Android : Pattern.UNICODE_CASE가 분음 기호와 일치하지 않습니다.
Util.Log("text = " + text);
Util.Log("regex = " + regex);
Util.Log("regexorig = " + regexorig);
Util.Log("Matches static: " + Pattern.matches(text, regex));
Pattern p1 = Pattern.compile(regex);
Util.Log("Matches p1: " + p1.matcher(text).matches());
Pattern p2 = Pattern.compile(regexorig, Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
Util.Log("Matches p2: " + p2.matcher(text).matches());
Util.Log("String matches: " + text.matches(regex));
출력입니다 :
이
LOG: (test.java:191):text = ü
LOG: (test.java:192):regex = (?iu)[A-Z][A-Z0-9 \-.',]*
LOG: (test.java:193):regexorig = [A-Z][A-Z0-9 \-.',]*
LOG: (test.java:194):Matches static: false
LOG: (test.java:196):Matches p1: false
LOG: (test.java:198):Matches p2: false
LOG: (test.java:199):String matches: false
내가 분음 부호를 얻이 수없는 것 -insensitive 정규식이 작동합니다. 이것은 안드로이드 버그인가요, 아니면 제가 빠진 것이 있습니까? documentation에 따르면 UNICODE_CASE는 Android의 대소 문자를 구분하지 않는 문자열을 위해 항상 켜져 있으므로 필요하지 않아야합니다. (실제로 그런 이유는 확실치 않지만 다른 토론에서는 중요합니다).
우수, 감사합니다. 이 점에있어서 iOS와는 다른 것으로 보입니다. – Oded
@Oded 방금 문제에 대한 또 다른 캐치가있을 수 있음을 알아 냈습니다. (대답을 편집했습니다) –
유니 코드의 영숫자와 일치시킬 수 있습니까? –