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 AYDEMIR
或Y?ld?r?m -> Yildirim
).
对不起,关于我的语法错误!...
使用Pattern.CASE_INSENSITIVE
和Pattern.UNICODE_CASE
标记:
Pattern p = Pattern.compile("yildirim", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Run Code Online (Sandbox Code Playgroud)
Pattern.CASE_INSENSITIVE
默认情况下,仅对US-ASCII字符集中的字符不区分大小写.Pattern.UNICODE_CASE
修改行为以使其与所有Unicode字符不区分大小写.
请注意,Java regex中的Unicode不区分大小写的匹配是以对文化不敏感的方式完成的.因此,?
,i
,I
,?
被认为是相同的字符.
根据您的使用情况,您可能希望使用,Pattern.LITERAL
如果要禁用模式中的所有元字符,或仅使用模式的字面部分进行转义Pattern.quote()
您评论中的问题比原始问题复杂。
您可以使用
string=Normalizer.normalize(string, Normalizer.Form.NFD).replaceAll("\\p{Mn}", "");
Run Code Online (Sandbox Code Playgroud)
转换"?ÖÜ?Ç??öü?ç?"
为nhahtdh"IOUSCG?ouscg"
所指出的足以区分大小写的匹配。如果你想执行一个大小写敏感的比赛,你必须添加一个匹配带。.replace('?', 'i')
?
i
归档时间: |
|
查看次数: |
3111 次 |
最近记录: |