A와 Z를 일치시키기 위해 정규식을 사용합니다.
[A-Za-z]
정규식이 사용자가 입력 한 utf8 문자와 일치하도록 허용하는 방법은 무엇입니까? 예를 들어 环保 部와 같은 중국어 단어
답변
찾고있는 것은 유니 코드 속성입니다.
예 : \p{L}
모든 언어의 모든 종류의 편지
따라서 이러한 중국어 단어와 일치하는 정규식은 다음과 같을 수 있습니다.
\p{L}+
이러한 속성이 많이 있습니다. 자세한 내용은 regular-expressions.info를 참조하십시오 .
또 다른 옵션은 수정자를 사용하는 것입니다.
Pattern.UNICODE_CHARACTER_CLASS
Java 7에는 Pattern.UNICODE_CHARACTER_CLASS
미리 정의 된 문자 클래스의 유니 코드 버전을 활성화 하는 새로운 속성 이 있습니다. 자세한 내용과 링크는 여기 내 대답을 참조하십시오.
이런 식으로 할 수 있습니다
Pattern p = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS);
그리고 \w
모든 언어에서 모든 문자와 모든 숫자와 일치 (물론 일부 단어의 결합 문자 싶습니다 _
).
답변
답변
NLS 지원을 해결하고 영어 특수 문자를 허용하지 않으려면 아래 패턴을 사용할 수 있습니다.
[a-zA-Z0-9 \ u0080- \ u9fff] * +
UTF 코드 포인트 참조 : http://www.utf8-chartable.de/unicode-utf8-table.pl
코드 조각 :
String vowels = "అఆఇఈఉఊఋఌఎఏఐఒఓఔౠౡ";
String consonants = "కఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహ";
String signsAndPunctuations = "కఁకంకఃకాకికీకుకూకృకౄకెకేకైకొకోకౌక్కౕకౖ";
String symbolsAndNumerals = "౦౧౨౩౪౫౬౭౮౯";
String engChinesStr = "ABC導字會";
Pattern ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU = Pattern
.compile("[a-zA-Z0-9 \\u0c00-\\u0c7f]*+");
System.out.println(ALPHANUMERIC_AND_SPACE_PATTERN_TELUGU.matcher(vowels)
.matches());
Pattern ALPHANUMERIC_AND_SPACE_PATTERN_CHINESE = Pattern
.compile("[a-zA-Z0-9 \\u4e00-\\u9fff]*+");
Pattern ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN = Pattern
.compile("[a-zA-Z0-9 \\u0080-\\u9fff]*+");
System.out.println(ENGLISH_ALPHANUMERIC_SPACE_AND_NLS_PATTERN.matcher(engChinesStr)
.matches());
답변
- Java 정규식 API는
char
유형에서 작동합니다. char
유형은 암시 적으로 UTF-16- UTF-8 데이터가있는 경우 입력시 UTF-16으로 트랜스 코딩해야합니다 (아직 수행되지 않은 경우)
유니 코드는 범용 문자 집합이며 UTF-8은 모든 것을 설명 할 수 있습니다 (제어 문자, 구두점, 기호, 문자 등 포함). 포함 할 항목과 제외 할 항목에 대해 더 구체적이어야합니다. Java 정규식은 \p{category}
구문을 사용하여 범주 별로 코드 포인트를 일치 시킵니다. 범주 목록 은 유니 코드 표준 을 참조하십시오 .
표의 문자 시퀀스에서 단어를 식별하고 구분하려면보다 정교한 API를 살펴 봐야합니다. 나는 BreakIterator
유형 부터 시작할 것 입니다.