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

Jun*_*por 2 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". 
Run Code Online (Sandbox Code Playgroud)

搜索的文本是动态变化的.因此,如何通过使用java正则表达式模式来解决这个问题.或者如何转换土耳其语字符(Ex: AYDEM?R convert to AYDEMIRY?ld?r?m -> Yildirim).

对不起,关于我的语法错误!...

nha*_*tdh 7

使用Pattern.CASE_INSENSITIVEPattern.UNICODE_CASE标记:

Pattern p = Pattern.compile("yildirim", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Run Code Online (Sandbox Code Playgroud)

在ideone上演示

Pattern.CASE_INSENSITIVE默认情况下,仅对US-ASCII字符集中的字符不区分大小写.Pattern.UNICODE_CASE修改行为​​以使其与所有Unicode字符不区分大小写.

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

根据您的使用情况,您可能希望使用,Pattern.LITERAL如果要禁用模式中的所有元字符,或仅使用模式的字面部分进行转义Pattern.quote()


Hol*_*ger 5

您评论中的问题比原始问题复杂。

您可以使用

string=Normalizer.normalize(string, Normalizer.Form.NFD).replaceAll("\\p{Mn}", "");
Run Code Online (Sandbox Code Playgroud)

转换"?ÖÜ?Ç??öü?ç?"nhahtdh"IOUSCG?ouscg"所指出的足以区分大小写的匹配。如果你想执行一个大小写敏感的比赛,你必须添加一个匹配带。.replace('?', 'i')?i