Как я могу использовать Java Regex для турецких символов в UTF-8
Я пытаюсь сделать операции регулярного выражения в Java. Но когда я ищу в турецком тексте, у меня возникают проблемы. Например;
Search Text = "Ahmet Yıldırım" or "Esin AYDEMİR"
//The e-mail stated in part(Ex: yildirim@example.com) , trying to look in name.
Regex Strings = "yildirim" or "aydemir".
Искомый текст динамически меняется. Поэтому, как я могу решить эту проблему, используя шаблон регулярных выражений Java. Или как конвертировать турецкие символы (Ex: AYDEMİR convert to AYDEMIR
или же Yıldırım -> Yildirim
).
Извините, о моих ошибках грамматики!...
3 ответа
Использование Pattern.CASE_INSENSITIVE
а также Pattern.UNICODE_CASE
флаг:
Pattern p = Pattern.compile("yildirim", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Pattern.CASE_INSENSITIVE
по умолчанию соответствует без учета регистра символов в наборе символов US-ASCII. Pattern.UNICODE_CASE
изменяет поведение, чтобы оно не зависело от регистра для всех символов Юникода.
Обратите внимание, что сопоставление без учета регистра в Юникоде в регулярном выражении Java выполняется без учета культуры. Следовательно, ı
, i
, I
, İ
считаются одним и тем же персонажем.
В зависимости от вашего варианта использования, вы можете использовать Pattern.LITERAL
если вы хотите отключить все метасимволы в шаблоне или экранировать только литеральные части шаблона с помощью Pattern.quote()
Вопрос в вашем комментарии сложнее оригинального.
Ты можешь использовать
string=Normalizer.normalize(string, Normalizer.Form.NFD).replaceAll("\\p{Mn}", "");
преобразовать "İÖÜŞÇĞıöüşçğ"
в "IOUSCGıouscg"
что уже достаточно для нечувствительного к регистру совпадения, на что указывает nhahtdh. Если вы хотите выполнить сравнение с учетом регистра, вы должны добавить .replace('ı', 'i')
соответствовать ı
с i
,
Я использую этот шаблон.
public static boolean isAlphaNumericWithWhiteSpace(String text) {
return text != null && text.matches("^[\\p{L}\\p{N}ın\\s]*$");
}
\ p {L} соответствует одной кодовой точке в категории "буква".
\ p {N} соответствует любому виду числовых символов в любом скрипте.
URL-адрес git hub для замены турецкого символа https://gist.github.com/onuryilmaz/6034569
в Яве string.matches(".*[İÖÜŞÇĞıöüşçğ]*.")
проверит, содержит ли строка турецкие чартеры.