Как я могу использовать 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);

Демо на Ideone

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(".*[İÖÜŞÇĞıöüşçğ]*.") проверит, содержит ли строка турецкие чартеры.

Другие вопросы по тегам