我如何将Java Regex用于土耳其语字符到UTF-8

时间:2015-08-20 12:11:40

标签: java regex unicode turkish

我正在尝试用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 AYDEMIRYıldırım -> Yildirim)。

抱歉,关于我的语法错误!...

4 个答案:

答案 0 :(得分:7)

使用Pattern.CASE_INSENSITIVEPattern.UNICODE_CASE标记:

Pattern p = Pattern.compile("yildirim", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);

Demo on ideone

默认情况下,

Pattern.CASE_INSENSITIVE仅对US-ASCII字符集中的字符不区分大小写。 Pattern.UNICODE_CASE修改行为,使其与所有Unicode字符不区分大小写。

请注意,Java regex中的Unicode不区分大小写的匹配是以对文化不敏感的方式完成的。因此,ıiIİ被认为是相同的字符。

根据您的使用情况,如果要禁用模式中的所有元字符,或者仅使用Pattern.quote()

来删除模式的文字部分,则可能需要使用Pattern.LITERAL

答案 1 :(得分:5)

your comment中的问题比原始问题更复杂。

您可以使用

string=Normalizer.normalize(string, Normalizer.Form.NFD).replaceAll("\\p{Mn}", "");

"İÖÜŞÇĞıöüşçğ"转换为"IOUSCGıouscg",这对于不区分大小写的匹配已足以作为指向out by nhahtdh。如果您要执行区分大小写的匹配,则必须添加.replace('ı', 'i')以匹配ı i

答案 2 :(得分:0)

我正在使用此模式。

public static boolean isAlphaNumericWithWhiteSpace(String text) {
        return text != null && text.matches("^[\\p{L}\\p{N}ın\\s]*$");
    }
  

\ p {L}匹配类别“字母”中的单个代码点。

     

\ p {N}与任何脚本中的任何数字字符匹配。

答案 3 :(得分:-1)

git hub网址,用于替换土耳其语字符https://gist.github.com/onuryilmaz/6034569

在Java string.matches(".*[İÖÜŞÇĞıöüşçğ]*.")中将检查字符串是否包含土耳其宪章。